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” |
|