Python 3.8

Python 3.8.0 (final) a fost lansat pe 14 octombrie 2019. Funcționalitățile pentru 3.8 sunt definite în PEP 569, iar o descriere detaliată a modificărilor poate fi găsită în Ce este nou în Python 3.8.

Funcționalități

Stare

PEP 570

Argumente exclusiv poziționale

PEP 572

Expresii de atribuire

Complet

PEP 574

Protocolul pickle 5 cu date în afara benzii

PEP 578

Cârlige de audit la rulare

PEP 587

Configurarea inițializării Python

PEP 590

Vectorcall: un protocol rapid de apelare pentru CPython

Diverse

f-string-urile acceptă = pentru expresii care se auto-documentează și pentru depanare

Complet

Alte modificări ale limbajului:

O instrucțiune continue era ilegală în clauza finally din cauza unei probleme de implementare. În Python 3.8 această restricție a fost ridicată

Complet

Tipurile bool, int și fractions.Fraction au acum o metodă as_integer_ratio() asemănătoare celei găsite în float și decimal.Decimal

Constructorii pentru int, float și complex vor folosi acum metoda specială __index__(), dacă este disponibilă și dacă metoda corespunzătoare __int__(), __float__() sau __complex__() nu este disponibilă

A fost adăugat suportul pentru secvențele de escape N{name} în expresiile regulate

Obiectele dict și dictviews sunt acum iterabile în ordinea inversă de inserare folosind reversed()

Sintaxa permisă pentru numele de tip cuvânt-cheie în apelurile de funcții a fost restricționată suplimentar. În special, f((keyword)=arg) nu mai este permis

Despachetarea generalizată a iterabilelor în instrucțiunile yield și return nu mai necesită paranteze de încadrare

Când lipsește o virgulă într-un cod precum [(10, 20) (30, 40)], compilatorul afișează un SyntaxWarning cu o sugestie utilă

Operațiile aritmetice între subclase ale datetime.date sau datetime.datetime și obiecte datetime.timedelta returnează acum o instanță a subclasei, în loc de clasa de bază

Când interpretorul Python este întrerupt de Ctrl-C (SIGINT), iar excepția KeyboardInterrupt rezultată nu este prinsă, procesul Python iese acum printr-un semnal SIGINT sau cu codul de ieșire corect, astfel încât procesul apelant să poată detecta că s-a oprit din cauza unui Ctrl-C

Unele stiluri avansate de programare necesită actualizarea obiectului types.CodeType pentru o funcție existentă

Pentru numere întregi, forma cu trei argumente a funcției pow() permite acum ca exponentul să fie negativ în cazul în care baza este relativ primă față de modul

Comprehensiunile de dict au fost sincronizate cu literalii de dict, astfel încât cheia este calculată prima și valoarea a doua

Metoda object.__reduce__() poate returna acum un tuplu de la două până la șase elemente

Modificări ale modulelor încorporate:

asyncio

asyncio.run() a trecut de la API-ul provizoriu la cel stabil

Complet

Rularea python -m asyncio lansează un REPL nativ asincron

Excepția asyncio.CancelledError moștenește acum din BaseException în loc de Exception și nu mai moștenește din concurrent.futures.CancelledError

Complet

A fost adăugat asyncio.Task.get_coro() pentru a obține corutina încapsulată dintr-un asyncio.Task

Sarcinile asyncio pot fi acum denumite, fie prin transmiterea argumentului de tip cuvânt-cheie name către asyncio.create_task() sau metoda create_task() a buclei de evenimente, fie prin apelarea metodei set_name() pe obiectul sarcină

A fost adăugat suportul pentru Happy Eyeballs la asyncio.loop.create_connection(). Pentru a specifica comportamentul, au fost adăugați doi parametri noi: happy_eyeballs_delay și interleave.

gc

get_objects() poate primi acum un parametru opțional generation care indică o generație din care să se obțină obiecte. (Rețineți totuși că, deși gc este încorporat, get_objects() nu este implementat pentru MicroPython)

math

A fost adăugată noua funcție math.dist() pentru calcularea distanței euclidiene între două puncte

A fost extinsă funcția math.hypot() pentru a gestiona dimensiuni multiple

A fost adăugată noua funcție math.prod(), ca funcție analogă lui sum(), care returnează produsul dintre o valoare „start” (implicit: 1) înmulțită cu un iterabil de numere

Au fost adăugate două noi funcții combinatorice math.perm() și math.comb()

A fost adăugată o nouă funcție math.isqrt() pentru calcularea precisă a rădăcinilor pătrate întregi fără conversie în virgulă mobilă

Funcția math.factorial() nu mai acceptă argumente care nu sunt de tip int

Complet

sys

Adăugarea noii funcții sys.unraisablehook(), care poate fi suprascrisă pentru a controla modul în care sunt gestionate „excepțiile care nu pot fi ridicate”