Python 3.8

Python 3.8.0 (final) dirilis pada 14 Oktober 2019. Fitur-fitur untuk 3.8 didefinisikan dalam PEP 569 dan deskripsi terperinci tentang perubahan dapat ditemukan di What's New in Python 3.8.

Fitur

Status

PEP 570

Argumen hanya-posisional

PEP 572

Ekspresi Penugasan

Selesai

PEP 574

Protokol Pickle 5 dengan data out-of-band

PEP 578

Hook audit runtime

PEP 587

Konfigurasi Inisialisasi Python

PEP 590

Vectorcall: protokol pemanggilan cepat untuk CPython

Lain-lain

f-string mendukung = untuk ekspresi self-documenting dan debugging

Selesai

Perubahan Bahasa Lainnya:

Pernyataan continue tidak diizinkan dalam klausa finally karena masalah pada implementasi. Dalam Python 3.8 pembatasan ini dicabut

Selesai

Tipe bool, int, dan fractions.Fraction kini memiliki metode as_integer_ratio() seperti yang ada di float dan decimal.Decimal

Konstruktor int, float dan complex kini akan menggunakan metode khusus __index__(), jika tersedia dan metode yang bersangkutan __int__(), __float__() atau __complex__() tidak tersedia

Menambahkan dukungan escape N{name} dalam ekspresi reguler

Dict dan dictview kini dapat diiterasi dalam urutan penyisipan terbalik menggunakan reversed()

Sintaks yang diizinkan untuk nama kata kunci dalam pemanggilan fungsi dibatasi lebih lanjut. Khususnya, f((keyword)=arg) tidak lagi diizinkan

Pembongkaran iterable yang digeneralisasi dalam pernyataan yield dan return tidak lagi memerlukan tanda kurung pembungkus

Ketika koma terlewat dalam kode seperti [(10, 20) (30, 40)], kompilator menampilkan SyntaxWarning dengan saran yang membantu

Operasi aritmetika antara subkelas datetime.date atau datetime.datetime dan objek datetime.timedelta kini mengembalikan instance dari subkelas, bukan kelas dasar

Ketika interpreter Python diinterupsi oleh Ctrl-C (SIGINT) dan pengecualian KeyboardInterrupt yang dihasilkan tidak ditangkap, proses Python kini keluar melalui sinyal SIGINT atau dengan kode keluar yang benar sehingga proses pemanggil dapat mendeteksi bahwa proses tersebut mati karena Ctrl-C

Beberapa gaya pemrograman tingkat lanjut memerlukan pembaruan objek types.CodeType untuk fungsi yang sudah ada

Untuk bilangan bulat, bentuk tiga argumen dari fungsi pow() kini mengizinkan eksponen negatif dalam kasus di mana basis relatif prima terhadap modulus

Dict comprehension telah disinkronkan dengan literal dict sehingga kunci dihitung terlebih dahulu dan nilai kedua

Metode object.__reduce__() kini dapat mengembalikan tuple dari dua hingga enam elemen

Perubahan pada modul built-in:

asyncio

asyncio.run() telah naik dari API sementara ke stabil

Selesai

Menjalankan python -m asyncio meluncurkan REPL async asli

Pengecualian asyncio.CancelledError kini mewarisi dari BaseException daripada Exception dan tidak lagi mewarisi dari concurrent.futures.CancelledError

Selesai

Ditambahkan asyncio.Task.get_coro() untuk mendapatkan coroutine yang dibungkus dalam asyncio.Task

Task Asyncio kini dapat diberi nama, baik dengan meneruskan argumen kata kunci name ke asyncio.create_task() atau metode event loop create_task(), maupun dengan memanggil metode set_name() pada objek task

Ditambahkan dukungan Happy Eyeballs ke asyncio.loop.create_connection(). Untuk menentukan perilaku, dua parameter baru telah ditambahkan: happy_eyeballs_delay dan interleave.

gc

get_objects() kini dapat menerima parameter generasi opsional yang menunjukkan generasi untuk mendapatkan objek. (Catatan, meskipun gc adalah built-in, get_objects() tidak diimplementasikan untuk MicroPython)

math

Ditambahkan fungsi baru math.dist() untuk menghitung jarak Euclidean antara dua titik

Memperluas fungsi math.hypot() untuk menangani beberapa dimensi

Ditambahkan fungsi baru, math.prod(), sebagai fungsi analog untuk sum() yang mengembalikan hasil kali nilai "start" (default: 1) dikali iterable angka

Ditambahkan dua fungsi kombinatorik baru math.perm() dan math.comb()

Ditambahkan fungsi baru math.isqrt() untuk menghitung akar kuadrat bilangan bulat yang akurat tanpa konversi ke floating point

Fungsi math.factorial() tidak lagi menerima argumen yang bukan berupa int

Selesai

sys

Menambahkan fungsi sys.unraisablehook() baru yang dapat ditimpa untuk mengontrol cara penanganan "pengecualian yang tidak dapat dimunculkan"