Python 3.9: Apa yang baru dan lebih baik

Python 3.9, yang dirilis hari ini, membawa perubahan signifikan pada fitur bahasa dan bagaimana bahasa dikembangkan. Python telah menjamur dalam popularitas beberapa tahun terakhir, dan penggunaannya telah meledak di berbagai bidang yang berkembang pesat seperti ilmu data dan pembelajaran mesin. Proyek ini bekerja keras untuk mengimbangi semua permintaan baru. 

Berikut adalah ikhtisar dari semua fitur baru yang besar di Python 3.9.

Python beralih ke siklus rilis tahunan

Sampai saat ini, Python telah dikembangkan dan dirilis dengan irama delapan belas bulan. PEP 602 mengusulkan agar tim pengembangan Python mengadopsi siklus rilis tahunan, dan proposal tersebut telah diterima. 

Siklus rilis tahunan berarti lebih sedikit fitur per rilis, tetapi itu juga berarti umpan balik yang lebih cepat pada pengujian fitur, lebih sedikit perubahan yang berpotensi merusak untuk setiap rilis, dan dengan demikian lebih banyak insentif bagi pengguna dan manajer distribusi Linux untuk meningkatkan Python lebih sering. Ini juga berarti fitur baru yang diusulkan di akhir siklus pengembangan tidak akan memakan waktu lama untuk diluncurkan ke rilis baru.

Garis waktu baru berarti Python 3.9 akan dikirim pada Oktober 2020. Python 3.10 secara resmi memulai pengembangan pra-alfa pada 19 Mei 2020, akan memasuki fase pengembangan alfa ketika Python 3.9 dikirimkan, dan akan dikirimkan pada Oktober 2021. Rilis Python masa depan akan mengikuti pola yang sama.

Python menjadi lebih cepat secara default

Setiap revisi Python menikmati peningkatan kinerja dibandingkan versi sebelumnya. Python 3.9 berputar dalam dua peningkatan besar yang meningkatkan kinerja tanpa memerlukan perubahan apa pun pada kode yang ada.

Peningkatan pertama melibatkan lebih banyak penggunaan vectorcallprotokol yang diperkenalkan di Python 3.8. vectorcallmembuat banyak panggilan fungsi umum lebih cepat dengan meminimalkan atau menghilangkan objek sementara yang dibuat untuk panggilan tersebut. Dalam Python 3.9, beberapa Python built-in - range, tuple, set, frozenset, list, dict- gunakan secara vectorcallinternal untuk mempercepat eksekusi.

Peningkat performa besar kedua adalah penguraian kode sumber Python yang lebih efisien. Parser baru untuk runtime CPython tidak dirancang untuk mengatasi masalah kinerja, melainkan untuk menangani inkonsistensi internal pada parser asli. Namun, manfaat pinggiran yang penting adalah penguraian yang lebih cepat, terutama untuk kode volume besar.

Lebih banyak fungsi string dan kamus Python

Python memudahkan manipulasi tipe data umum, dan Python 3.9 memperluas kemudahan ini dengan fitur baru untuk string dan kamus. Untuk string, ada metode baru untuk menghapus prefiks dan sufiks, operasi yang telah lama membutuhkan banyak pekerjaan manual untuk dilakukan. Untuk kamus, sekarang ada operator gabungan, satu untuk menggabungkan dua kamus menjadi kamus baru dan satu lagi untuk memperbarui isi kamus satu dengan kamus lain.

Dekorator kehilangan beberapa batasan

Dekorator memungkinkan Anda menggabungkan fungsi Python untuk mengubah perilakunya secara terprogram. Sebelumnya, dekorator hanya dapat terdiri dari simbol @, nama (mis. func) Atau nama titik ( func.method) dan secara opsional satu panggilan ( func.method(arg1, arg2)). Dengan Python 3.9, dekorator sekarang dapat terdiri dari ekspresi apa pun yang valid.

Salah satu cara lama untuk mengatasi pembatasan ini adalah dengan membuat fungsi atau ekspresi lambda yang akan menggantikan ekspresi yang lebih kompleks saat digunakan sebagai dekorator. Sekarang ekspresi apa pun akan dilakukan, asalkan menghasilkan sesuatu yang dapat berfungsi sebagai dekorator.

Operasi tipe Python baru

Selama beberapa versi terakhir, Python telah memperluas dukungan untuk petunjuk tipe. Ini terutama untuk kepentingan linter dan pemeriksa kode; jenis tidak diberlakukan saat runtime di CPython, dan tidak ada rencana untuk menjadikan Python bahasa yang diketik secara statis. Tapi petunjuk tipe adalah alat yang ampuh untuk memastikan konsistensi dalam basis kode besar, jadi kode Python masih bisa mendapatkan keuntungan dari memiliki petunjuk tipe. 

Dua fitur baru untuk petunjuk tipe dan anotasi tipe tersedia di Python 3.9. Dalam satu, petunjuk jenis untuk konten koleksi - misalnya, daftar dan kamus - sekarang tersedia dengan Python secara native. Ini berarti Anda dapat, misalnya, mendeskripsikan daftar sebagai list[int] - daftar bilangan bulat - tanpa perlu typingperpustakaan untuk melakukannya.

Penambahan kedua pada mekanisme pengetikan Python adalah fungsi fleksibel dan anotasi variabel. Hal ini memungkinkan penggunaan Annotatedtipe untuk mendeskripsikan tipe menggunakan metadata yang dapat diperiksa sebelumnya (dengan alat linting) atau pada waktu proses. Misalnya, Annotated[int, ctype("char")]dapat digunakan untuk mendeskripsikan bilangan bulat yang harus dianggap sebagai chartipe dalam C. Secara default, Python tidak akan melakukan apa pun dengan anotasi seperti itu, tetapi dapat digunakan oleh linter kode. 

Perbaikan internal Python

Membersihkan, menyempurnakan, dan memodernisasi internal Python adalah inisiatif berkelanjutan untuk pengembang Python, dan Python 3.9 memiliki beberapa perubahan dalam hal itu.

Yang pertama adalah mendesain ulang cara modul berinteraksi dengan mesin impor. Modul ekstensi Python, yang ditulis dalam C, sekarang dapat menggunakan mekanisme pemuatan baru yang membuatnya berperilaku lebih seperti modul Python biasa saat diimpor. Beberapa modul di perpustakaan standar Python baru mendukung perilaku ini: _abc, audioop, _bz2, _codecs, _contextvars, _crypt, _functools, _json, _locale, operator, resource, time, _weakref. Mekanisme pemuatan baru tidak hanya memungkinkan modul ekstensi ditangani secara lebih fleksibel oleh Python, tetapi juga memungkinkan kemampuan baru seperti perilaku hooking tingkat lanjut.

Inisiatif pembersihan kedua adalah ABI internal yang stabil untuk CPython, yang dijamin akan bertahan seumur hidup Python 3. Secara historis, setiap revisi utama Python tidak kompatibel dengan ABI dengan versi sebelumnya, yang membutuhkan modul ekstensi untuk dikompilasi ulang untuk setiap versi baru. Mulai sekarang, modul ekstensi apa pun yang menggunakan ABI stabil akan berfungsi di semua versi Python. Dengan Python 3.9, mengikuti modul di perpustakaan standar menggunakan stabil ABI: audioop, ast, grp, _hashlib, pwd, _posixsubprocess, random, select, struct, termios, zlib.

Perubahan lain pada Python 3.9

  • Perpustakaan standar Python sekarang mendukung Basis Data Zona Waktu IANA. Basis data tersebut dipelihara dengan baik dan banyak digunakan, dan memiliki cara langsung untuk menggunakannya di pustaka datetime Python akan menghemat waktu.
  • Metode string baru memungkinkan penghapusan prefiks dan sufiks dengan mudah. Ini adalah salah satu skenario penggunaan sehari-hari yang umum yang membutuhkan terlalu banyak boilerplate daripada yang diperlukan. Metode .removeprefix()dan baru .removesuffix()mengembalikan salinan string yang dimodifikasi tanpa awalan atau sufiks yang dipermasalahkan, asalkan ada dalam string.

Bagaimana melakukan lebih banyak hal dengan Python

  • 4 pemeriksa tipe Python untuk menjaga kode Anda tetap bersih
  • Gaya Python: 5 alat untuk membersihkan kode Python Anda
  • Cara bekerja dengan tipe data daftar Python
  • Cara mengemas aplikasi Python dengan BeeWare Briefcase
  • Cara menjalankan anaconda berdampingan dengan ular piton lainnya
  • Cara menggunakan dataclass Python
  • Mulailah dengan async dengan Python
  • Cara menggunakan asyncio dengan Python
  • 3 langkah untuk perbaikan asinkron Python
  • Cara menggunakan PyInstaller untuk membuat file executable Python
  • Tutorial Cython: Cara mempercepat Python
  • Cara menginstal Python dengan cara cerdas
  • Bagaimana mengelola proyek Python dengan Puisi
  • Cara mengelola proyek Python dengan Pipenv
  • Virtualenv dan venv: Penjelasan lingkungan virtual Python
  • Python virtualenv dan venv lakukan dan tidak boleh dilakukan
  • Penjelasan threading dan subproses Python
  • Cara menggunakan debugger Python
  • Cara menggunakan timeit untuk membuat profil kode Python
  • Cara menggunakan cProfile untuk membuat profil kode Python
  • Cara mengonversi Python ke JavaScript (dan kembali lagi)