Python 3.10

Python 3.10.0 (final) dirilis pada 4 Oktober 2021. Fitur-fitur untuk 3.10 didefinisikan dalam PEP 619 dan deskripsi perubahan secara terperinci dapat ditemukan di What's New in Python 3.10.

Fitur sintaksis baru

Status

PEP 634

Structural Pattern Matching: Spesifikasi

[1]

PEP 635

Structural Pattern Matching: Motivasi dan Rasionalitas

[1]

PEP 636

Structural Pattern Matching: Tutorial

[1]

bpo-12782

Manajer konteks yang diberi tanda kurung kini secara resmi diizinkan

Fitur baru dalam pustaka standar

PEP 618

Tambahkan Pemeriksaan Panjang Opsional pada zip

Peningkatan interpreter

PEP 626

Nomor baris yang tepat untuk debugging dan alat lainnya

Fitur pengetikan baru

PEP 604

Izinkan penulisan tipe union sebagai X | Y

PEP 613

Type Alias Eksplisit

PEP 612

Variabel Spesifikasi Parameter

Deprecasi, penghapusan, atau pembatasan penting

PEP 644

Mewajibkan OpenSSL 1.1.1 atau yang lebih baru

PEP 632

Deprecasi modul distutils.

Tidak relevan

PEP 623

Deprecasi dan persiapan untuk penghapusan anggota wstr di PyUnicodeObject.

Tidak relevan

PEP 624

Hapus API encoder Py_UNICODE

Tidak relevan

PEP 597

Tambahkan EncodingWarning opsional

Perubahan Bahasa Lainnya:

Tipe int memiliki metode baru int.bit_count(), yang mengembalikan jumlah angka satu dalam ekspansi biner dari suatu bilangan bulat, juga dikenal sebagai population count.

Tampilan yang dikembalikan oleh dict.keys(), dict.values() dan dict.items() kini semuanya memiliki atribut mapping yang memberikan objek types.MappingProxyType yang membungkus kamus asli.

PEP 618: Fungsi zip() sekarang memiliki flag opsional strict, yang digunakan untuk mewajibkan semua iterable memiliki panjang yang sama.

Fungsi builtin dan ekstensi yang menerima argumen integer tidak lagi menerima Decimals, Fractions, dan objek lain yang hanya dapat dikonversi ke integer dengan kerugian (misalnya yang memiliki metode __int__() tetapi tidak memiliki metode __index__()).

Jika object.__ipow__() mengembalikan NotImplemented, operator akan dengan benar mundur ke object.__pow__() dan object.__rpow__() sebagaimana diharapkan.

Ekspresi penugasan kini dapat digunakan tanpa tanda kurung di dalam set literal dan set comprehension, serta dalam indeks urutan (tetapi bukan irisan).

Fungsi memiliki atribut baru __builtins__ yang digunakan untuk mencari simbol builtin saat fungsi dieksekusi, sebagai pengganti pencarian di __globals__['__builtins__']. Atribut diinisialisasi dari __globals__["__builtins__"] jika ada, jika tidak dari builtin saat ini.

Dua fungsi builtin baru -- aiter() dan anext() telah ditambahkan untuk menyediakan padanan asinkron dari iter() dan next(), masing-masing.

Metode statis (@staticmethod) dan metode kelas (@classmethod) kini mewarisi atribut metode (__module__, __name__, __qualname__, __doc__, __annotations__) dan memiliki atribut baru __wrapped__. Selain itu, metode statis kini dapat dipanggil sebagai fungsi biasa.

Anotasi untuk target kompleks (semua hal di luar target simple name yang didefinisikan oleh PEP 526) tidak lagi menimbulkan efek runtime apapun dengan from __future__ import annotations.

Objek kelas dan modul kini secara malas membuat dict anotasi kosong sesuai permintaan. Dict anotasi disimpan dalam __dict__ objek untuk kompatibilitas mundur. Hal ini meningkatkan praktik terbaik untuk bekerja dengan __annotations__.

Anotasi yang terdiri dari yield, yield from, await atau ekspresi bernama kini dilarang di bawah from __future__ import annotations karena efek sampingnya.

Penggunaan variabel tidak terikat, super() dan ekspresi lain yang mungkin mengubah pemrosesan tabel simbol sebagai anotasi kini dianggap tidak berpengaruh di bawah from __future__ import annotations.

Hash nilai NaN dari tipe float maupun tipe decimal.Decimal kini bergantung pada identitas objek. Sebelumnya, keduanya selalu di-hash ke 0 meskipun nilai NaN tidak sama satu sama lain. Hal ini menyebabkan perilaku runtime yang berpotensi kuadratik karena terlalu banyak tabrakan hash saat membuat dictionary dan set yang mengandung banyak NaN.

Sebuah SyntaxError (sebagai pengganti NameError) akan dimunculkan saat menghapus konstanta __debug__.

Pengecualian SyntaxError kini memiliki atribut end_lineno dan end_offset. Nilai tersebut akan menjadi None jika tidak ditentukan.

Perubahan pada modul builtin:

asyncio

Tambahkan metode connect_accepted_socket() yang hilang.

array

Metode index() dari array.array kini memiliki parameter start dan stop opsional.

gc

Tambahkan audit hook untuk gc.get_objects(), gc.get_referrers() dan gc.get_referents().

hashlib

Modul hashlib memerlukan OpenSSL 1.1.1 atau yang lebih baru.

Modul hashlib memiliki dukungan awal untuk OpenSSL 3.0.0.

Fallback pure-Python dari pbkdf2_hmac() sudah deprecated. Di masa mendatang PBKDF2-HMAC hanya akan tersedia ketika Python dibangun dengan dukungan OpenSSL.

os

Tambahkan dukungan os.cpu_count() untuk VxWorks RTOS.

Tambahkan fungsi baru os.eventfd() dan helper terkait untuk membungkus syscall eventfd2 di Linux.

Tambahkan os.splice() yang memungkinkan pemindahan data antara dua deskriptor file tanpa penyalinan antara ruang alamat kernel dan ruang alamat pengguna, di mana salah satu deskriptor file harus merujuk ke pipe.

Tambahkan O_EVTONLY, O_FSYNC, O_SYMLINK dan O_NOFOLLOW_ANY untuk macOS.

platform

Tambahkan platform.freedesktop_os_release() untuk mengambil identifikasi sistem operasi dari file standar freedesktop.org os-release.

socket

Pengecualian socket.timeout kini merupakan alias dari TimeoutError.

Tambahkan opsi untuk membuat socket MPTCP dengan IPPROTO_MPTCP.

Tambahkan opsi IP_RECVTOS untuk menerima tipe layanan (ToS) atau field DSCP/ECN.

ssl

Modul ssl memerlukan OpenSSL 1.1.1 atau yang lebih baru.

Modul ssl memiliki dukungan awal untuk OpenSSL 3.0.0 dan opsi baru OP_IGNORE_UNEXPECTED_EOF.

Fungsi yang sudah deprecated dan penggunaan konstanta deprecated kini menghasilkan DeprecationWarning. ssl.SSLContext.options memiliki OP_NO_SSLv2 dan OP_NO_SSLv3 yang diset secara default sehingga tidak dapat memperingatkan tentang pengaturan flag tersebut lagi.

Modul ssl kini memiliki pengaturan default yang lebih aman. Cipher tanpa forward secrecy atau SHA-1 MAC dinonaktifkan secara default. Level keamanan 2 melarang kunci RSA, DH, dan ECC yang lemah dengan kurang dari 112 bit keamanan. SSLContext default ke versi protokol minimum TLS 1.2. Pengaturan didasarkan pada penelitian Hynek Schlawack.

Protokol yang sudah deprecated SSL 3.0, TLS 1.0, dan TLS 1.1 tidak lagi didukung secara resmi. Python tidak memblokir mereka secara aktif. Namun opsi build OpenSSL, konfigurasi distro, patch vendor, dan suite cipher mungkin mencegah handshake yang berhasil.

Tambahkan parameter timeout ke fungsi ssl.get_server_certificate().

Modul ssl menggunakan heap-types dan inisialisasi multi-fase.

Flag verifikasi baru VERIFY_X509_PARTIAL_CHAIN telah ditambahkan.

sys

Tambahkan atribut sys.orig_argv: daftar argumen baris perintah asli yang diteruskan ke eksekutabel Python.

Tambahkan sys.stdlib_module_names, yang berisi daftar nama modul pustaka standar.

_thread

_thread.interrupt_main() kini mengambil nomor sinyal opsional untuk disimulasikan (defaultnya tetap signal.SIGINT).

Catatan