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

PEP 573

Akses cepat ke status modul dari metode tipe ekstensi C

Tidak relevan

PEP 584

Operator union ditambahkan ke dict

Selesai [1]

PEP 585

Tipe hint generik dalam koleksi standar

PEP 593

Anotasi fungsi dan variabel yang fleksibel

PEP 602

CPython mengadopsi siklus rilis tahunan. Alih-alih tahunan, menargetkan siklus rilis dua bulan

Tidak relevan

PEP 614

Pelonggaran pembatasan tata bahasa pada dekorator

PEP 615

Database Zona Waktu IANA kini tersedia di pustaka standar dalam modul zoneinfo

PEP 616

Metode string untuk menghapus awalan dan akhiran

PEP 617

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:

asyncio

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

gc

Pengumpulan sampah tidak memblokir pada objek yang diresureksikan

Ditambahkan fungsi baru gc.is_finalized() untuk memeriksa apakah suatu objek telah difinalisasi oleh pengumpul sampah

math

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

os

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

random

Ditambahkan metode random.Random.randbytes baru: menghasilkan byte acak

sys

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