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 | |
Acces rapid la starea modulului din metodele tipurilor de extensie C | Nerelevant | |
Operatori de uniune adăugați la dict | Complet [1] | |
Adnotări de tip generice în colecțiile standard | ||
Adnotări flexibile pentru funcții și variabile | ||
CPython adoptă un ciclu de lansare anual. În loc de anual, se vizează un ciclu de lansare la două luni | Nerelevant | |
Restricții de gramatică relaxate pentru decoratori | ||
Baza de date IANA a fusurilor orare este acum prezentă în biblioteca standard, în modulul zoneinfo | ||
Metode pentru șiruri de caractere pentru eliminarea prefixelor și sufixelor | ||
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:
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 | |
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 | |
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 | |
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 | |
A fost adăugată o nouă metodă random.Random.randbytes: generează octeți aleatori | |
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