Python 3.9¶
Python 3.9.0 (final) dirilis pada 5 Oktober 2020. Fitur-fitur untuk 3.9 didefinisikan dalam PEP 596 dan deskripsi terperinci tentang perubahan dapat ditemukan di What's New in Python 3.9
Fitur | Status | |
Akses cepat ke status modul dari metode tipe ekstensi C | Tidak relevan | |
Operator union ditambahkan ke dict | Selesai [1] | |
Tipe hint generik dalam koleksi standar | ||
Anotasi fungsi dan variabel yang fleksibel | ||
CPython mengadopsi siklus rilis tahunan. Alih-alih tahunan, menargetkan siklus rilis dua bulan | Tidak relevan | |
Pelonggaran pembatasan tata bahasa pada dekorator | ||
Database Zona Waktu IANA kini tersedia di pustaka standar dalam modul zoneinfo | ||
Metode string untuk menghapus awalan dan akhiran | ||
CPython kini menggunakan parser baru berbasis PEG | Tidak relevan |
Perubahan Bahasa Lainnya:
__import__() kini memunculkan ImportError daripada ValueError | Selesai |
Python kini mendapatkan path absolut dari nama file skrip yang ditentukan pada baris perintah (misalnya: python3 script.py): atribut __file__ dari modul __main__ menjadi path absolut, bukan path relatif | |
Secara default, demi performa terbaik, argumen errors hanya diperiksa pada kesalahan enkoding/dekoding pertama dan argumen encoding terkadang diabaikan untuk string kosong | |
"".replace("", s, n) kini mengembalikan s daripada string kosong untuk semua n yang bukan nol. Kini konsisten dengan "".replace("", s) | |
Ekspresi valid apa pun kini dapat digunakan sebagai dekorator. Sebelumnya, tata bahasa jauh lebih terbatas | |
Penjalanan paralel aclose() / asend() / athrow() kini dilarang, dan ag_running kini mencerminkan status berjalan aktual dari generator async | |
Kesalahan tak terduga dalam memanggil metode __iter__ tidak lagi ditutupi oleh TypeError pada operator in dan fungsi contains(), indexOf() dan countOf() dari modul operator | |
Ekspresi lambda yang tidak dikurung tidak lagi dapat menjadi bagian ekspresi dalam klausa if di comprehension dan ekspresi generator |
Perubahan pada modul built-in:
Karena masalah keamanan yang signifikan, parameter reuse_address dari asyncio.loop.create_datagram_endpoint() tidak lagi didukung | |
Ditambahkan coroutine baru shutdown_default_executor() yang menjadwalkan shutdown untuk executor default yang menunggu ThreadPoolExecutor selesai menutup. Juga, asyncio.run() telah diperbarui untuk menggunakan coroutine baru. | |
Ditambahkan asyncio.PidfdChildWatcher, implementasi child watcher khusus Linux yang mem-poll deskriptor file proses | |
ditambahkan coroutine asyncio.to_thread() baru | |
Saat membatalkan task karena timeout, asyncio.wait_for() kini akan menunggu hingga pembatalan selesai juga dalam kasus ketika timeout <= 0, seperti yang dilakukan dengan timeout positif | |
asyncio kini memunculkan TyperError saat memanggil metode yang tidak kompatibel dengan socket ssl.SSLSocket | |
Pengumpulan sampah tidak memblokir pada objek yang diresureksikan | |
Ditambahkan fungsi baru gc.is_finalized() untuk memeriksa apakah suatu objek telah difinalisasi oleh pengumpul sampah | |
Memperluas fungsi math.gcd() untuk menangani beberapa argumen. Sebelumnya, hanya mendukung dua argumen | |
Ditambahkan math.lcm(): mengembalikan kelipatan persekutuan terkecil dari argumen yang ditentukan | |
Ditambahkan math.nextafter(): mengembalikan nilai floating-point berikutnya setelah x menuju y | |
Ditambahkan math.ulp(): mengembalikan nilai bit paling tidak signifikan dari sebuah float | |
Mengekspos os.pidfd_open() dan os.P_PIDFD khusus Linux | |
Fungsi os.unsetenv() kini juga tersedia di Windows | Selesai |
Fungsi os.putenv() dan os.unsetenv() kini selalu tersedia | Selesai |
Ditambahkan fungsi os.waitstatus_to_exitcode(): mengonversi status tunggu ke kode keluar | |
Ditambahkan metode random.Random.randbytes baru: menghasilkan byte acak | |
Ditambahkan atribut sys.platlibdir baru: nama direktori pustaka khusus platform | |
Sebelumnya, sys.stderr di-buffer-blok ketika non-interaktif. Kini stderr secara default selalu di-buffer-baris | |
Catatan