Python 3.9

Python 3.9.0 (final) a fost lansat pe 5 octombrie 2020. Funcționalitățile pentru 3.9 sunt definite în PEP 596, iar o descriere detaliată a modificărilor poate fi găsită în Ce este nou în Python 3.9

Funcționalități

Stare

PEP 573

Acces rapid la starea modulului din metodele tipurilor de extensie C

Nerelevant

PEP 584

Operatori de uniune adăugați la dict

Complet [1]

PEP 585

Adnotări de tip generice în colecțiile standard

PEP 593

Adnotări flexibile pentru funcții și variabile

PEP 602

CPython adoptă un ciclu de lansare anual. În loc de anual, se vizează un ciclu de lansare la două luni

Nerelevant

PEP 614

Restricții de gramatică relaxate pentru decoratori

PEP 615

Baza de date IANA a fusurilor orare este acum prezentă în biblioteca standard, în modulul zoneinfo

PEP 616

Metode pentru șiruri de caractere pentru eliminarea prefixelor și sufixelor

PEP 617

CPython folosește acum un nou analizor sintactic bazat pe PEG

Nerelevant

Alte modificări ale limbajului:

__import__() ridică acum ImportError în loc de ValueError

Complet

Python obține acum calea absolută a numelui fișierului script specificat în linia de comandă (ex: python3 script.py): atributul __file__ al modulului __main__ a devenit o cale absolută, în loc de o cale relativă

În mod implicit, pentru cea mai bună performanță, argumentul errors este verificat doar la prima eroare de codificare/decodificare, iar argumentul encoding este uneori ignorat pentru șirurile goale

„”.replace(„”, s, n) returnează acum s în loc de un șir gol pentru toate valorile n diferite de zero. Este acum consecvent cu „”.replace(„”, s)

Orice expresie validă poate fi acum folosită ca decorator. Anterior, gramatica era mult mai restrictivă

Rularea în paralel a aclose() / asend() / athrow() este acum interzisă, iar ag_running reflectă acum starea reală de rulare a generatorului asincron

Erorile neașteptate la apelarea metodei __iter__ nu mai sunt mascate de TypeError în operatorul in și în funcțiile contains(), indexOf() și countOf() ale modulului operator

Expresiile lambda fără paranteze nu mai pot fi partea expresie dintr-o clauză if în comprehensiuni și expresii de generator

Modificări ale modulelor încorporate:

asyncio

Din cauza unor probleme semnificative de securitate, parametrul reuse_address al asyncio.loop.create_datagram_endpoint() nu mai este acceptat

A fost adăugată o nouă corutină shutdown_default_executor() care programează o oprire pentru executorul implicit, care așteaptă ca ThreadPoolExecutor să termine închiderea. De asemenea, asyncio.run() a fost actualizată pentru a folosi noua corutină.

A fost adăugat asyncio.PidfdChildWatcher, o implementare de supraveghetor de procese-copil specifică Linux, care interoghează descriptorii de fișiere ai proceselor

a fost adăugată o nouă coroutine asyncio.to_thread()

La anularea sarcinii din cauza expirării unui timp limită, asyncio.wait_for() va aștepta acum până când anularea este completă, inclusiv în cazul în care timpul limită este <= 0, la fel cum face cu timpii limită pozitivi

asyncio ridică acum TyperError la apelarea unor metode incompatibile cu un socket ssl.SSLSocket

gc

Colectarea gunoiului nu se mai blochează pe obiectele reînviate

A fost adăugată o nouă funcție gc.is_finalized() pentru a verifica dacă un obiect a fost finalizat de colectorul de gunoi

math

A fost extinsă funcția math.gcd() pentru a gestiona argumente multiple. Anterior, accepta doar două argumente

A fost adăugat math.lcm(): returnează cel mai mic multiplu comun al argumentelor specificate

A fost adăugat math.nextafter(): returnează următoarea valoare în virgulă mobilă după x în direcția lui y

A fost adăugat math.ulp(): returnează valoarea celui mai puțin semnificativ bit al unui float

os

Au fost expuse funcțiile specifice Linux os.pidfd_open() și os.P_PIDFD

Funcția os.unsetenv() este acum disponibilă și pe Windows

Complet

Funcțiile os.putenv() și os.unsetenv() sunt acum întotdeauna disponibile

Complet

A fost adăugată funcția os.waitstatus_to_exitcode(): convertește o stare de așteptare într-un cod de ieșire

random

A fost adăugată o nouă metodă random.Random.randbytes: generează octeți aleatori

sys

A fost adăugat un nou atribut sys.platlibdir: numele directorului de biblioteci specific platformei

Anterior, sys.stderr era stocat în tampon pe blocuri când nu era interactiv. Acum stderr este implicit întotdeauna stocat în tampon pe linii

Note