Apa yang Baru di Python 3.11 dan Perlukah Anda Peduli?
Berikut ulasan mendetail kami tentang fitur-fitur terpenting yang hadir di Python 3.11, termasuk cara memasang versi beta dan kapan Anda bisa mencoba rilis stabil resminya.
Python meraih penghargaan TIOBE "Language of the Year" tiga kali dalam empat tahun terakhir. Bahasa pemrograman populer ini masih berada di puncak indeks TIOBE di pertengahan 2022.
Python berada di puncak TIOBE Index untuk Juni 2022.
Rating Python sebesar 12,74% berarti kata kunci “Python” muncul di sekitar ~13% dari seluruh kueri mesin telusur terkait pemrograman. Dengan kata lain, setiap pertanyaan pemrograman ke-7 atau ke-8 di Internet membahas Python.
Saat ini, Python kerap dikaitkan dengan terobosan terbesar dalam data science dan AI. Para praktisi mengapresiasi kesederhanaannya, kumpulan pustaka bawaan dan pihak ketiga yang sangat banyak untuk berbagai tugas, serta komunitasnya.
Dengan rilis stabil final 3.11 pada 3 Oktober 2022, komunitas Python dapat menantikan berbagai pembaruan yang disambut baik, termasuk peningkatan kecepatan yang signifikan, penanganan kesalahan dan debugging yang lebih baik, serta banyak peningkatan kenyamanan pada pustaka standar.
Apa Saja Fitur Baru di Python 3.11?
Changelog Python 3.11 berisi daftar hampir tak berujung dari perbaikan bug, peningkatan, dan penambahan, yang sebagian besar mungkin tidak akan Anda sadari. Namun, beberapa fitur baru yang penting bisa sangat meningkatkan alur kerja Python Anda saat rilis stabil tiba. Fitur-fitur baru ini diuraikan di bawah.
1. Peningkatan Kecepatan
Perubahan besar pertama yang akan membuat data scientist antusias adalah peningkatan kecepatan—standard benchmark suite berjalan sekitar 25% lebih cepat dibanding 3.10. Dokumentasi Python mengklaim 3.11 bisa hingga 60% lebih cepat dalam beberapa kasus. Berikut cara melakukan uji benchmark sendiri untuk menguji peningkatan kecepatan.
Untuk membandingkan kecepatan Python 3.10 dan 3.11, Anda memerlukan instalasi Docker. Setelah memastikan Docker Desktop berjalan, jalankan dua perintah ini di terminal, yang akan mengunduh dua image untuk dua versi Python.
$ docker run -d python:3.10.4-bullseye
$ docker run -d python:3.11-rc-bullseyeDidukung oleh
Image yang diunduh akan terlihat di dashboard Docker Anda, tempat Anda juga bisa menyalakannya.
Setelah Anda meluncurkan container, Anda dapat menjalankan docker ps untuk melihat detail seperti ID container, image, status, dan lainnya.
Container yang berjalan juga terlihat di tab Containers pada dashboard Anda, tempat Anda juga akan menemukan tombol CLI di sebelah "Run/Stop". Klik keduanya untuk meluncurkan dua tab terminal yang terpasang ke container.
Di kedua tab, pasang paket pyperformance melalui pip. Lalu, jalankan perintah berikut di setiap terminal container.
$ pyperformance run -r -o py310.jsone run -r -o py311.jsonDidukung oleh
Perintah ini akan menjalankan uji benchmark untuk sekitar 60 fungsi Python dari pustaka standar dan menghasilkan metadata JSON. Saya secara opsional menambahkan tag -r untuk memberi tahu pyperformance bahwa saya ingin pengujian yang lebih ketat, yang memakan waktu lebih lama. Dalam kasus saya, kedua container berjalan di mesin Windows dengan CPU AMD Ryzen 12-core.
Sekarang, kita memiliki dua file JSON di dua container, dan kita perlu menempatkan keduanya dalam satu direktori untuk melanjutkan uji kecepatan. Untuk itu, kita akan menggunakan perintah docker cp untuk menyalin file JSON dari container Python 3.11 ke 3.10.
Jalankan perintah berikut di tab terminal terpisah, perbarui path agar sesuai dengan path di komputer Anda:
Dalam kasus saya, crazy_snyder dan charming_proskuriakova adalah ID container yang berjalan. Kini kedua file JSON berada di container Python 3.10. Untuk menyelesaikan benchmark dan menyimpan hasilnya sebagai CSV, jalankan perintah berikut.
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
df = pd.read_csv("data/comparison.csv")
df.rename({"Base":"py310","Changed":"py311","Benchmark":"function"},
axis=1,
inplace=True)Didukung oleh
Setiap baris dalam dataframe mencatat berapa lama waktu yang dibutuhkan (dalam milidetik) bagi kedua versi untuk menjalankan fungsi Python tertentu. Mari membuat histogram peningkatan kecepatan.
df["speed_up"]=(df["py310"]/ df["py311"]).round(3)
fig, ax = plt.subplots()
sns.histplot(df["speed_up"], bins=11)
ax.set(xlabel="Speedup (times)",
title="Python 3.10 vs. Python 3.11 - speedup comparison")
plt.show()Didukung oleh
Terlihat jelas dari plot bahwa mayoritas fungsi di Python 3.11 sekitar 1,2 kali (20%) lebih cepat. Kita juga bisa mengonfirmasi perkiraan ini dengan mean dan median.
Walau peningkatan performa terlihat jelas di atas kertas, dampak spesifiknya akan bervariasi pada tiap orang dan versi final stabil Python 3.11 juga belum dirilis. Uji benchmark menggunakan fungsi Python murni, yang mungkin tidak sering Anda gunakan dalam pekerjaan sehari-hari, tetapi menyiapkan instalasi Docker untuk Python 3.10 dan 3.11 akan memungkinkan Anda mendapat gambaran peningkatan kecepatan untuk kasus penggunaan spesifik Anda.
2. Pesan Kesalahan yang Lebih Baik
Fitur menarik lain dari Python 3.11 adalah pesan kesalahan yang lebih baik dan menunjuk tepat ke lokasi kesalahan. Alih-alih menampilkan traceback 100 baris yang berakhir dengan pesan kesalahan yang sulit ditafsirkan, Python 3.11 menunjuk ke ekspresi persis yang menyebabkan kesalahan.
Pada contoh di atas, interpreter Python menunjuk ke x yang membuat skrip macet karena bernilai None. Kesalahan ini akan ambigu di versi Python saat ini karena ada dua objek dengan atribut ‘x’. Namun, penanganan kesalahan 3.11 dengan jelas menunjukkan ekspresi bermasalah tersebut.
Contoh ini menunjukkan bagaimana 3.11 mengidentifikasi kesalahan dari dictionary bersarang dalam dan dapat menampilkan dengan jelas kunci mana yang bermasalah.
Anda dapat melihat presisi yang sama pada ekspresi aritmetika yang kompleks.
Pembaruan pesan kesalahan ini jelas merupakan tambahan yang berguna, terutama bagi data scientist yang kerap kesulitan men-debug skrip.
3. Catatan pada Exception
“Eksplisit lebih baik daripada implisit.”
Kalimat di atas adalah baris kedua dari Zen of Python, daftar 20 prinsip desain Python. Ini mewakili kaidah bahwa kode Python seharusnya se-ekspresif mungkin.
Untuk memperkuat pola desain ini, Python 3.11 memperkenalkan catatan pada exception (PEP 678). Kini, di dalam klausa except, Anda dapat memanggil fungsi add_note() dan meneruskan pesan khusus saat Anda melemparkan error.
import math
try:
math.sqrt(-1)except ValueError as e:
e.add_note("Negative value passed! Please try again.")raiseDidukung oleh
Jika Anda menulis kelas exception khusus seperti di bawah ini, Anda dapat menambahkan beberapa catatan ke kelas di dalam atribut tingkat kelas yang dilindungi __notes__:
import math
classMyOwnError(Exception):# Should be a list of strings
__notes__ =["This is a custom error!"]try:
math.sqrt(-1)except:raise MyOwnErrorDidukung oleh
Sekarang, saat interpreter menemui error, ia akan menampilkan pesan khusus setelah isi pesan reguler.
Ada juga sintaks baru untuk melempar exception dengan klausa except*, yang digunakan bersama kelas ExceptionGroup baru. PEP 654 menyebutkan bahwa Anda dapat menggunakannya untuk melempar beberapa error yang tidak terkait secara bersamaan dalam berbagai skenario. Kebanyakan situasi ini cukup spesifik, seperti bekerja dengan web socket, pemrograman konkuren dengan asyncio, dan sebagainya, yang jarang muncul dalam pekerjaan data science sehari-hari, tetapi jika Anda tertarik, Anda dapat mempelajari sintaks barunya di sini.
4. Fitur Typing Baru: Self
Bahasa yang bertipe statis membantu membuat kode Anda mudah dibaca dan di-debug. Mendefinisikan tipe variabel, masukan fungsi, dan keluarannya secara tepat dapat menghemat waktu debugging berjam-jam dan memudahkan orang lain membaca kode Anda. Menambahkan anotasi typing juga memungkinkan IDE modern menampilkan definisi fungsi saat Anda mengetik namanya, sehingga fungsi Anda lebih mudah dipahami orang lain.
Sejauh ini, modul typing yang kuat di Python memiliki kelas untuk hampir semua tipe data, kecuali untuk kelas yang mengembalikan instance dirinya sendiri. Di versi Python saat ini, contoh di bawah tidak memungkinkan:
from typing import Self
classLanguage:def__init__(self, name, version, release_date):
self.name = name
self.version = version
self.release_date = release_date
defchange_version(self, version)-> Self:
self.version = version
return Language(self.name, self.version, self.release_date)Didukung oleh
Namun, Python 3.11 memperkenalkan kelas Self, yang dapat Anda tambahkan ke definisi fungsi jika nilai kembalinya adalah self atau instance baru dari kelas itu sendiri.
5. Peningkatan pada Pustaka Standar
Ada beberapa peningkatan kenyamanan lain pada pustaka standar. Pertama, dua fungsi yang telah lama ditunggu akhirnya ditambahkan ke modul math.
>>>import math
>>> math.cbrt(9)# Find the cube-root of x2.080083823051904>>> math.cbrt(27)3.0000000000000004>>> math.exp2(5)# Raise 2 to the power of x32.0Didukung oleh
Fakta bahwa Python membutuhkan 28 tahun untuk menambahkan fungsi akar pangkat tiga cukup mengejutkan tetapi, seperti pepatah, lebih baik terlambat daripada tidak sama sekali.
Modul fractions juga menambahkan fitur baru yang memungkinkan Anda membuat pecahan dari string:
>>>from fractions import Fraction
>>> Fraction("22/7")# New in Python 3.11
Fraction(22,7)>>> Fraction(numerator=22, denominator=7)
Fraction(22,7)>>> Fraction("3e-4")
Fraction(3,10000)>>> Fraction("-73/41")
Fraction(-73,41)>>> Fraction(3.1415)# Find the closest approximation to the given float
Fraction(7074029114692207,2251799813685248)Didukung oleh
Seperti yang dapat Anda lihat, modul fractions bisa sangat berguna untuk operasi aritmetika tertentu. Terutama, saya menyukai bagaimana Anda dapat menemukan pecahan terdekat yang mendekati nilai float yang diberikan. Anda bisa melangkah lebih jauh dengan memberikan batas penyebut:
>>>from math import pi
>>> Fraction(pi).limit_denominator(100000)
Fraction(312689,99532)Didukung oleh
Ada juga modul baru bernama tomllib untuk mengurai dokumen TOML. TOML (Tom's Obvious Minimal Language) adalah format berkas populer untuk menulis berkas konfigurasi yang mudah dibaca manusia. Berikut gambar dari halaman utama proyek:
Pengembangan Python 3.11 dimulai pada 5 Mei 2021. Sejak itu, tujuh versi alfa telah dirilis, bersamaan dengan versi beta pertama pada 8 Mei 2022. Sejak tanggal tersebut hingga rilis resmi tidak akan ada fitur baru yang diperkenalkan ke Python.
Rilis final yang stabil akan hadir pada 3 Oktober 2022, setelah tiga versi beta lagi dan dua kandidat rilis di antaranya. Anda dapat mempelajari lebih lanjut tentang Python dengan melihat sumber daya berikut.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Python meraih penghargaan TIOBE "Language of the Year" tiga kali dalam empat tahun terakhir. Bahasa pemrograman populer ini masih berada di puncak indeks TIOBE di pertengahan 2022.
Python berada di puncak TIOBE Index untuk Juni 2022.
Rating Python sebesar 12,74% berarti kata kunci “Python” muncul di sekitar ~13% dari seluruh kueri mesin telusur terkait pemrograman. Dengan kata lain, setiap pertanyaan pemrograman ke-7 atau ke-8 di Internet membahas Python.
Saat ini, Python kerap dikaitkan dengan terobosan terbesar dalam data science dan AI. Para praktisi mengapresiasi kesederhanaannya, kumpulan pustaka bawaan dan pihak ketiga yang sangat banyak untuk berbagai tugas, serta komunitasnya.
Dengan rilis stabil final 3.11 pada 3 Oktober 2022, komunitas Python dapat menantikan berbagai pembaruan yang disambut baik, termasuk peningkatan kecepatan yang signifikan, penanganan kesalahan dan debugging yang lebih baik, serta banyak peningkatan kenyamanan pada pustaka standar.
Apa Saja Fitur Baru di Python 3.11?
Changelog Python 3.11 berisi daftar hampir tak berujung dari perbaikan bug, peningkatan, dan penambahan, yang sebagian besar mungkin tidak akan Anda sadari. Namun, beberapa fitur baru yang penting bisa sangat meningkatkan alur kerja Python Anda saat rilis stabil tiba. Fitur-fitur baru ini diuraikan di bawah.
1. Peningkatan Kecepatan
Perubahan besar pertama yang akan membuat data scientist antusias adalah peningkatan kecepatan—standard benchmark suite berjalan sekitar 25% lebih cepat dibanding 3.10. Dokumentasi Python mengklaim 3.11 bisa hingga 60% lebih cepat dalam beberapa kasus. Berikut cara melakukan uji benchmark sendiri untuk menguji peningkatan kecepatan.
Untuk membandingkan kecepatan Python 3.10 dan 3.11, Anda memerlukan instalasi Docker. Setelah memastikan Docker Desktop berjalan, jalankan dua perintah ini di terminal, yang akan mengunduh dua image untuk dua versi Python.
Image yang diunduh akan terlihat di dashboard Docker Anda, tempat Anda juga bisa menyalakannya.
Setelah Anda meluncurkan container, Anda dapat menjalankan docker ps untuk melihat detail seperti ID container, image, status, dan lainnya.
Container yang berjalan juga terlihat di tab Containers pada dashboard Anda, tempat Anda juga akan menemukan tombol CLI di sebelah "
Run/Stop". Klik keduanya untuk meluncurkan dua tab terminal yang terpasang ke container.Di kedua tab, pasang paket
pyperformancemelaluipip. Lalu, jalankan perintah berikut di setiap terminal container.Untuk Python 3.10
Untuk Python 3.11
Perintah ini akan menjalankan uji benchmark untuk sekitar 60 fungsi Python dari pustaka standar dan menghasilkan metadata JSON. Saya secara opsional menambahkan tag
-runtuk memberi tahupyperformancebahwa saya ingin pengujian yang lebih ketat, yang memakan waktu lebih lama. Dalam kasus saya, kedua container berjalan di mesin Windows dengan CPU AMD Ryzen 12-core.Sekarang, kita memiliki dua file JSON di dua container, dan kita perlu menempatkan keduanya dalam satu direktori untuk melanjutkan uji kecepatan. Untuk itu, kita akan menggunakan perintah
docker cpuntuk menyalin file JSON dari container Python 3.11 ke 3.10.Jalankan perintah berikut di tab terminal terpisah, perbarui path agar sesuai dengan path di komputer Anda:
Dalam kasus saya,
crazy_snyderdancharming_proskuriakovaadalah ID container yang berjalan. Kini kedua file JSON berada di container Python 3.10. Untuk menyelesaikan benchmark dan menyimpan hasilnya sebagai CSV, jalankan perintah berikut.Terakhir, mari muat CSV ke Pandas dan analisis:
scimark_monte_carlomakochameleonfloatregex_effbotSetiap baris dalam dataframe mencatat berapa lama waktu yang dibutuhkan (dalam milidetik) bagi kedua versi untuk menjalankan fungsi Python tertentu. Mari membuat histogram peningkatan kecepatan.
Terlihat jelas dari plot bahwa mayoritas fungsi di Python 3.11 sekitar 1,2 kali (20%) lebih cepat. Kita juga bisa mengonfirmasi perkiraan ini dengan mean dan median.
Tampaknya ada satu kasus di mana peningkatan kecepatan melampaui 60%.
Ada juga empat kasus di mana Python 3.10 lebih cepat daripada versi baru.
Walau peningkatan performa terlihat jelas di atas kertas, dampak spesifiknya akan bervariasi pada tiap orang dan versi final stabil Python 3.11 juga belum dirilis. Uji benchmark menggunakan fungsi Python murni, yang mungkin tidak sering Anda gunakan dalam pekerjaan sehari-hari, tetapi menyiapkan instalasi Docker untuk Python 3.10 dan 3.11 akan memungkinkan Anda mendapat gambaran peningkatan kecepatan untuk kasus penggunaan spesifik Anda.
2. Pesan Kesalahan yang Lebih Baik
Fitur menarik lain dari Python 3.11 adalah pesan kesalahan yang lebih baik dan menunjuk tepat ke lokasi kesalahan. Alih-alih menampilkan traceback 100 baris yang berakhir dengan pesan kesalahan yang sulit ditafsirkan, Python 3.11 menunjuk ke ekspresi persis yang menyebabkan kesalahan.
Pada contoh di atas, interpreter Python menunjuk ke x yang membuat skrip macet karena bernilai None. Kesalahan ini akan ambigu di versi Python saat ini karena ada dua objek dengan atribut ‘x’. Namun, penanganan kesalahan 3.11 dengan jelas menunjukkan ekspresi bermasalah tersebut.
Contoh ini menunjukkan bagaimana 3.11 mengidentifikasi kesalahan dari dictionary bersarang dalam dan dapat menampilkan dengan jelas kunci mana yang bermasalah.
Anda dapat melihat presisi yang sama pada ekspresi aritmetika yang kompleks.
Pembaruan pesan kesalahan ini jelas merupakan tambahan yang berguna, terutama bagi data scientist yang kerap kesulitan men-debug skrip.
3. Catatan pada Exception
“Eksplisit lebih baik daripada implisit.”
Kalimat di atas adalah baris kedua dari Zen of Python, daftar 20 prinsip desain Python. Ini mewakili kaidah bahwa kode Python seharusnya se-ekspresif mungkin.
Untuk memperkuat pola desain ini, Python 3.11 memperkenalkan catatan pada exception (PEP 678). Kini, di dalam klausa except, Anda dapat memanggil fungsi
add_note()dan meneruskan pesan khusus saat Anda melemparkan error.Jika Anda menulis kelas exception khusus seperti di bawah ini, Anda dapat menambahkan beberapa catatan ke kelas di dalam atribut tingkat kelas yang dilindungi
__notes__:Sekarang, saat interpreter menemui error, ia akan menampilkan pesan khusus setelah isi pesan reguler.
Ada juga sintaks baru untuk melempar exception dengan klausa except*, yang digunakan bersama kelas ExceptionGroup baru. PEP 654 menyebutkan bahwa Anda dapat menggunakannya untuk melempar beberapa error yang tidak terkait secara bersamaan dalam berbagai skenario. Kebanyakan situasi ini cukup spesifik, seperti bekerja dengan web socket, pemrograman konkuren dengan
asyncio, dan sebagainya, yang jarang muncul dalam pekerjaan data science sehari-hari, tetapi jika Anda tertarik, Anda dapat mempelajari sintaks barunya di sini.4. Fitur Typing Baru: Self
Bahasa yang bertipe statis membantu membuat kode Anda mudah dibaca dan di-debug. Mendefinisikan tipe variabel, masukan fungsi, dan keluarannya secara tepat dapat menghemat waktu debugging berjam-jam dan memudahkan orang lain membaca kode Anda. Menambahkan anotasi typing juga memungkinkan IDE modern menampilkan definisi fungsi saat Anda mengetik namanya, sehingga fungsi Anda lebih mudah dipahami orang lain.
Sejauh ini, modul typing yang kuat di Python memiliki kelas untuk hampir semua tipe data, kecuali untuk kelas yang mengembalikan instance dirinya sendiri. Di versi Python saat ini, contoh di bawah tidak memungkinkan:
Namun, Python 3.11 memperkenalkan kelas Self, yang dapat Anda tambahkan ke definisi fungsi jika nilai kembalinya adalah self atau instance baru dari kelas itu sendiri.
5. Peningkatan pada Pustaka Standar
Ada beberapa peningkatan kenyamanan lain pada pustaka standar. Pertama, dua fungsi yang telah lama ditunggu akhirnya ditambahkan ke modul math.
Fakta bahwa Python membutuhkan 28 tahun untuk menambahkan fungsi akar pangkat tiga cukup mengejutkan tetapi, seperti pepatah, lebih baik terlambat daripada tidak sama sekali.
Modul fractions juga menambahkan fitur baru yang memungkinkan Anda membuat pecahan dari string:
Seperti yang dapat Anda lihat, modul fractions bisa sangat berguna untuk operasi aritmetika tertentu. Terutama, saya menyukai bagaimana Anda dapat menemukan pecahan terdekat yang mendekati nilai float yang diberikan. Anda bisa melangkah lebih jauh dengan memberikan batas penyebut:
Ada juga modul baru bernama
tomllibuntuk mengurai dokumen TOML. TOML (Tom's Obvious Minimal Language) adalah format berkas populer untuk menulis berkas konfigurasi yang mudah dibaca manusia. Berikut gambar dari halaman utama proyek:Tanggal Rilis Python 3.11
Pengembangan Python 3.11 dimulai pada 5 Mei 2021. Sejak itu, tujuh versi alfa telah dirilis, bersamaan dengan versi beta pertama pada 8 Mei 2022. Sejak tanggal tersebut hingga rilis resmi tidak akan ada fitur baru yang diperkenalkan ke Python.
Rilis final yang stabil akan hadir pada 3 Oktober 2022, setelah tiga versi beta lagi dan dua kandidat rilis di antaranya. Anda dapat mempelajari lebih lanjut tentang Python dengan melihat sumber daya berikut.