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 | |
Argumente exclusiv poziționale | ||
Expresii de atribuire | Complet | |
Protocolul pickle 5 cu date în afara benzii | ||
Cârlige de audit la rulare | ||
Configurarea inițializării Python | ||
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.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. | |
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) | |
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 |
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” | |