Python 3.10

A Python 3.10.0 (végleges) 2021. október 4-én jelent meg. A 3.10-es verzió jellemzőit a PEP 619 határozza meg, a változtatások részletes leírása pedig a What’s New in Python 3.10 oldalon található.

Új szintaktikai jellemzők

Állapot

PEP 634

Strukturális mintaillesztés: specifikáció

[1]

PEP 635

Strukturális mintaillesztés: motiváció és indoklás

[1]

PEP 636

Strukturális mintaillesztés: oktatóanyag

[1]

bpo-12782

A zárójelezett kontextuskezelők mostantól hivatalosan engedélyezettek

Új jellemzők a standard könyvtárban

PEP 618

Opcionális hosszellenőrzés hozzáadása a zip függvényhez

Az értelmező fejlesztései

PEP 626

Pontos sorszámok hibakereséshez és más eszközökhöz

Új típuskezelési (typing) jellemzők

PEP 604

Unió típusok írásának engedélyezése X | Y formában

PEP 613

Explicit típusaliasok

PEP 612

Paraméterspecifikációs változók

Fontos elavulások, eltávolítások vagy korlátozások

PEP 644

Az OpenSSL 1.1.1 vagy újabb megkövetelése

PEP 632

A distutils modul elavulttá nyilvánítása.

Nem releváns

PEP 623

A PyUnicodeObject wstr tagjának elavulttá nyilvánítása és felkészülés az eltávolítására.

Nem releváns

PEP 624

A Py_UNICODE kódoló API-k eltávolítása

Nem releváns

PEP 597

Opcionális EncodingWarning hozzáadása

Egyéb nyelvi változások:

Az int típus új metódussal bővült, az int.bit_count() metódussal, amely egy adott egész szám bináris alakjában lévő egyesek számát adja vissza, amelyet populációszámlálásnak (population count) is neveznek.

A dict.keys(), dict.values() és dict.items() által visszaadott nézeteknek mostantól mindnek van egy mapping attribútuma, amely egy types.MappingProxyType objektumot ad vissza, amely az eredeti szótárt csomagolja be.

PEP 618: A zip() függvénynek mostantól van egy opcionális strict jelzője, amely megköveteli, hogy az összes iterálható objektum azonos hosszúságú legyen.

A beépített és bővítményfüggvények, amelyek egész argumentumokat vesznek át, többé nem fogadnak el Decimalértékeket, Fractionértékeket és más olyan objektumokat, amelyek csak veszteséggel alakíthatók egész számmá (pl. amelyeknek van __int__() metódusuk, de nincs __index__() metódusuk).

Ha az object.__ipow__() visszatérési értéke NotImplemented, az operátor a várt módon helyesen visszaesik az object.__pow__() és object.__rpow__() metódusokra.

Az értékadó kifejezések mostantól zárójelek nélkül használhatók halmazliterálokon és halmazértelmezéseken belül, valamint szekvenciaindexekben (de szeletekben nem).

A függvényeknek van egy új __builtins__ attribútumuk, amelyet a beépített szimbólumok keresésére használnak egy függvény végrehajtásakor, ahelyett, hogy a __globals__['__builtins__'] helyen keresnének. Az attribútum a __globals__["__builtins__"] értékből inicializálódik, ha az létezik, egyébként az aktuális beépítettekből.

Két új beépített függvénnyel – az aiter() és anext() függvényekkel – bővült a nyelv, hogy aszinkron megfelelőit nyújtsák az iter(), illetve next() függvényeknek.

A statikus metódusok (@staticmethod) és osztálymetódusok (@classmethod) mostantól öröklik a metódusattribútumokat (__module__, __name__, __qualname__, __doc__, __annotations__), és van egy új __wrapped__ attribútumuk. Ráadásul a statikus metódusok mostantól közönséges függvényekként hívhatók.

Az összetett célpontok annotációi (minden, ami a PEP 526 által definiált simple name célpontokon kívül esik) többé nem okoznak semmilyen futásidejű hatást a from __future__ import annotations használatával.

Az osztály- és modulobjektumok mostantól igény szerint, lustán hoznak létre üres annotációs szótárakat. Az annotációs szótárak az objektum __dict__ attribútumában tárolódnak a visszafelé kompatibilitás érdekében. Ez javítja az __annotations__ használatának ajánlott gyakorlatát.

A yield, yield from, await vagy elnevezett kifejezésekből álló annotációk mellékhatásaik miatt mostantól tiltottak a from __future__ import annotations használata esetén.

A nem kötött változók, a super() és más olyan kifejezések használata, amelyek megváltoztathatják a szimbólumtábla feldolgozását, annotációként mostantól hatástalanná válnak a from __future__ import annotations használata esetén.

A float típusú és a decimal.Decimal típusú NaN értékek hash-értékei mostantól az objektum azonosságától függenek. Korábban mindig 0 értékre hashelődtek, annak ellenére, hogy a NaN értékek nem egyenlők egymással. Ez potenciálisan négyzetes futásidejű viselkedést okozott a túlzott hash-ütközések miatt, amikor több NaN-t tartalmazó szótárakat és halmazokat hoztak létre.

A __debug__ konstans törlésekor mostantól SyntaxError (a NameError helyett) keletkezik.

A SyntaxError kivételeknek mostantól van end_lineno és end_offset attribútuma. Ezek értéke None lesz, ha nem állapítható meg.

A beépített modulok változásai:

asyncio

A hiányzó connect_accepted_socket() metódus hozzáadása.

array

Az array.array index() metódusának mostantól van opcionális start és stop paramétere.

gc

Audit hookok hozzáadása a gc.get_objects(), gc.get_referrers() és gc.get_referents() függvényekhez.

hashlib

A hashlib modul OpenSSL 1.1.1 vagy újabb verziót igényel.

A hashlib modul előzetes támogatást nyújt az OpenSSL 3.0.0-hoz.

A pbkdf2_hmac() tisztán Python alapú tartalék megvalósítása elavult. A jövőben a PBKDF2-HMAC csak akkor lesz elérhető, ha a Python OpenSSL-támogatással lett lefordítva.

os

Az os.cpu_count() támogatásának hozzáadása a VxWorks RTOS-hoz.

Egy új os.eventfd() függvény és kapcsolódó segédfüggvények hozzáadása az eventfd2 rendszerhívás becsomagolásához Linuxon.

Az os.splice() hozzáadása, amely lehetővé teszi az adatok mozgatását két fájlleíró között a kernelcímtér és a felhasználói címtér közötti másolás nélkül, ahol az egyik fájlleírónak csővezetékre (pipe) kell hivatkoznia.

Az O_EVTONLY, O_FSYNC, O_SYMLINK és O_NOFOLLOW_ANY hozzáadása macOS-hez.

platform

A platform.freedesktop_os_release() hozzáadása az operációs rendszer azonosításának lekéréséhez a freedesktop.org os-release szabványos fájlból.

socket

A socket.timeout kivétel mostantól a TimeoutError aliasa.

Lehetőség hozzáadása MPTCP socketek létrehozására az IPPROTO_MPTCP használatával.

Az IP_RECVTOS opció hozzáadása a szolgáltatástípus (ToS) vagy a DSCP/ECN mezők fogadásához.

ssl

Az ssl modul OpenSSL 1.1.1 vagy újabb verziót igényel.

Az ssl modul előzetes támogatást nyújt az OpenSSL 3.0.0-hoz és az új OP_IGNORE_UNEXPECTED_EOF opcióhoz.

Az elavult függvények és az elavult konstansok használata mostantól DeprecationWarning figyelmeztetést eredményez. Az ssl.SSLContext.options alapértelmezetten beállítja az OP_NO_SSLv2 és OP_NO_SSLv3 értékeket, ezért nem tud figyelmeztetni a jelző ismételt beállítására.

Az ssl modul mostantól biztonságosabb alapértelmezett beállításokkal rendelkezik. A továbbítási titkosság (forward secrecy) vagy SHA-1 MAC nélküli titkosítások alapértelmezetten le vannak tiltva. A 2. biztonsági szint megtiltja a 112 bitnél kevesebb biztonságot nyújtó gyenge RSA-, DH- és ECC-kulcsokat. Az SSLContext alapértelmezett minimális protokollverziója TLS 1.2. A beállítások Hynek Schlawack kutatásán alapulnak.

Az elavult SSL 3.0, TLS 1.0 és TLS 1.1 protokollok többé nem hivatalosan támogatottak. A Python nem tiltja le őket aktívan. Az OpenSSL build-opciók, a disztribúciós konfigurációk, a gyártói javítások és a titkosítási csomagok azonban megakadályozhatják a sikeres kézfogást (handshake).

Egy timeout paraméter hozzáadása az ssl.get_server_certificate() függvényhez.

Az ssl modul heap-típusokat és többfázisú inicializálást használ.

Egy új VERIFY_X509_PARTIAL_CHAIN ellenőrzési jelző került hozzáadásra.

sys

A sys.orig_argv attribútum hozzáadása: a Python végrehajtható állományának átadott eredeti parancssori argumentumok listája.

A sys.stdlib_module_names hozzáadása, amely a standard könyvtár modulneveinek listáját tartalmazza.

_thread

A _thread.interrupt_main() mostantól opcionális szignálszámot vesz át a szimulációhoz (az alapértelmezett továbbra is a signal.SIGINT).

Megjegyzések