Lewati ke konten utama

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.
Bexruz (Bex) Tuychiev
Bexruz (Bex) Tuychiev

Buat Akun Gratis Anda

Berlatih dan lacak kemajuan Anda.

Lanjutkan dengan GoogleDengan melanjutkan, Anda menyetujui Ketentuan Penggunaan, Kebijakan Privasi dan bahwa data Anda disimpan di AS.

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.

TIOBE Index

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-bullseye

Image yang diunduh akan terlihat di dashboard Docker Anda, tempat Anda juga bisa menyalakannya.

Docker installation of python 3.11

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.

Untuk Python 3.10

$ pyperformance run -r -o py310.json

Untuk Python 3.11

$ pyperformance run -r -o py310.jsone run -r -o py311.json

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:

$ docker cp crazy_snyder:/py311.json C:/Users/bex/Desktop

$ docker cp C:/Users/bex/Desktop/py311.json charming_proskuriakova:/

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.

$ pyperformance compare py310.json py311.json --csv comparison.csv

$ docker cp charming_proskuriakova:/comparison.csv C:/Users/bex/Desktop/articles

Terakhir, mari muat CSV ke Pandas dan analisis:

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)
>>> df.shape
(59, 3)
>>> df.sample(5)
 Functionpy310py311
40scimark_monte_carlo0.123920.08052
19mako0.019670.01289
1chameleon0.011310.00843
8float0.142650.09133
35regex_effbot0.003150.00261

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()

Difference in speed betweeon python 3.11 and python 3.10

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.

>>> df["speed_up"].mean()
1.2605593220338982
>>> df["speed_up"].median()
1.207

Tampaknya ada satu kasus di mana peningkatan kecepatan melampaui 60%.

>>> df["speed_up"].max()
1.899

Ada juga empat kasus di mana Python 3.10 lebih cepat daripada versi baru.

>>>  (df["speed_up"] <= 1).sum() 
4

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.

Traceback errors in python 3.10

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.

Traceback messages in python 3.11

Anda dapat melihat presisi yang sama pada ekspresi aritmetika yang kompleks.

Traceback messages in Python 3.11

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.")
  raise

Custom exceptions

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

class MyOwnError(Exception):
   # Should be a list of strings
   __notes__ = ["This is a custom error!"]

try:
   math.sqrt(-1)
except:
   raise MyOwnError

custom exceptions

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
class Language:

  def __init__(self, name, version, release_date):
      self.name = name
      self.version = version
      self.release_date = release_date

  def change_version(self, version) -> Self:
      self.version = version

      return Language(self.name, self.version, self.release_date)

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 x
2.080083823051904
>>> math.cbrt(27)
3.0000000000000004
>>> math.exp2(5)  # Raise 2 to the power of x
32.0

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)

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)

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:

TOML landing page

import tomllib

toml_str = """
python-version = "3.11.0"
release_date = "2022-10-22"
"""

data = tomllib.loads(toml_str)
print(data)  # {'python-version': '3.11.0', 'release_date': '2022-10-22'}
print(data['python-version'])  # 3.11.0
print(data['release_date'])  # 2022-10-22

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.

Topik

Terkait

blogs

Spaghetti Plot dan Jalur Badai

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

blogs

Tutorial Korelasi di R