Python 3.9

Python 3.9.0 (završna verzija) izdan je 5. listopada 2020. Značajke za 3.9 definirane su u PEP 596, a detaljan opis promjena može se pronaći u What’s New in Python 3.9

Značajke

Status

PEP 573

Brz pristup stanju modula iz metoda tipova C proširenja

Nije relevantno

PEP 584

Operatori unije dodani u dict

Dovršeno [1]

PEP 585

Tipkanje generičkih anotacija u standardnim kolekcijama

PEP 593

Fleksibilne anotacije funkcija i varijabli

PEP 602

CPython usvaja godišnji ciklus izdavanja. Umjesto godišnjeg, cilja se na dvomjesečni ciklus izdavanja

Nije relevantno

PEP 614

Ublažena gramatička ograničenja na dekoratorima

PEP 615

Baza podataka vremenskih zona IANA sada je prisutna u standardnoj biblioteci u modulu zoneinfo

PEP 616

Metode niza za uklanjanje prefiksa i sufiksa

PEP 617

CPython sada koristi novi parser temeljen na PEG

Nije relevantno

Ostale jezične promjene:

__import__() sada izaziva ImportError umjesto ValueError

Dovršeno

Python sada dohvaća apsolutnu putanju naziva datoteke skripte navedene u naredbenom retku (npr.: python3 script.py): atribut __file__ modula __main__ postao je apsolutna putanja, umjesto relativne putanje

Prema zadanim postavkama, radi najboljih performansi, argument errors provjerava se samo pri prvoj pogrešci kodiranja/dekodiranja, a argument encoding ponekad se zanemaruje za prazne nizove

„”.replace(„”, s, n) sada vraća s umjesto praznog niza za sve n različite od nule. Sada je u skladu s „”.replace(„”, s)

Bilo koji valjani izraz sada se može koristiti kao dekorator. Prije je gramatika bila mnogo restriktivnija

Paralelno izvođenje aclose() / asend() / athrow() sada je zabranjeno, a ag_running sada odražava stvarni status izvođenja asinkronog generatora

Neočekivane pogreške pri pozivanju metode __iter__ više nisu prikrivene s TypeError u operatoru in te u funkcijama contains(), indexOf() i countOf() modula operator

Lambda izrazi bez zagrada više ne mogu biti dio izraza u klauzuli if u komprehenzijama i generatorskim izrazima

Promjene ugrađenih modula:

asyncio

Zbog značajnih sigurnosnih razloga, parametar reuse_address funkcije asyncio.loop.create_datagram_endpoint() više nije podržan

Dodana je nova korutina shutdown_default_executor() koja zakazuje gašenje zadanog izvršitelja koje čeka da ThreadPoolExecutor dovrši zatvaranje. Također, asyncio.run() ažurirana je da koristi novu korutinu.

Dodana je asyncio.PidfdChildWatcher, implementacija nadzornika podređenih procesa specifična za Linux koja anketira deskriptore datoteka procesa

dodana je nova coroutine asyncio.to_thread()

Pri otkazivanju zadatka zbog isteka vremena, asyncio.wait_for() sada će čekati dok otkazivanje ne bude dovršeno i u slučaju kada je timeout <= 0, kao što to čini s pozitivnim vremenskim ograničenjima

asyncio sada izaziva TyperError pri pozivanju nekompatibilnih metoda s utičnicom ssl.SSLSocket

gc

Sakupljanje smeća ne blokira na uskrslim objektima

Dodana je nova funkcija gc.is_finalized() za provjeru je li objekt finaliziran od strane sakupljača smeća

math

Proširena je funkcija math.gcd() za obradu više argumenata. Prije je podržavala samo dva argumenta

Dodana je math.lcm(): vraća najmanji zajednički višekratnik navedenih argumenata

Dodana je math.nextafter(): vraća sljedeću vrijednost s pomičnim zarezom nakon x prema y

Dodana je math.ulp(): vraća vrijednost najmanje značajnog bita broja s pomičnim zarezom

os

Izloženi su Linux-specifični os.pidfd_open() i os.P_PIDFD

Funkcija os.unsetenv() sada je dostupna i na Windowsu

Dovršeno

Funkcije os.putenv() i os.unsetenv() sada su uvijek dostupne

Dovršeno

Dodana je funkcija os.waitstatus_to_exitcode(): pretvara status čekanja u izlazni kod

random

Dodana je nova metoda random.Random.randbytes: generira nasumične bajtove

sys

Dodan je novi atribut sys.platlibdir: naziv direktorija biblioteke specifičnog za platformu

Prije je sys.stderr bio blokovski međuspremnik kada je neinteraktivan. Sada stderr prema zadanim postavkama uvijek koristi međuspremnik po retku

Napomene