Lansarea limbajului de programare Python 3.10

După un an de dezvoltare, a fost lansată o versiune semnificativă a limbajului de programare Python 3.10. Noua ramură va fi susținută timp de un an și jumătate, după care vor fi formulate corecturi de securitate timp de alte trei ani și jumătate.

În același timp, a început testarea alpha a ramurii Python 3.11 (conform noului program de dezvoltare, lucrările la noua ramură încep cu cinci luni înainte de lansarea ramurii anterioare și, cu ocazia următoarei lansări, ajung în stadiul de testare alpha). Ramura Python 3.11 va rămâne în stadiul de lansări alpha timp de șapte luni, timp în care vor fi adăugate noi funcționalități și vor fi corectate erorile. Ulterior, timp de trei luni, va avea loc testarea versiunilor beta, perioadă în care adăugarea de noi funcționalități va fi interzisă și toată atenția va fi îndreptată spre corectarea erorilor. Ultimele două luni înainte de lansare, ramura va fi în stadiul de candidat pentru lansare, în care va fi efectuată stabilizarea finală.

Printre noutățile adăugate în Python 3.10 se numără:

  • Au fost implementate operatorii „match” și „case” pentru compararea cu modele, care îmbunătățesc lizibilitatea codului, simplifică compararea obiectelor Python arbitrare și cresc fiabilitatea codului datorită posibilității de verificare statică extinsă a tipurilor. Implementarea este, în mare parte, similară operatorului „match” disponibil în limbajele Scala, Rust și F#, care efectuează comparația rezultatelor execuției expresiei specificate cu o listă de modele enumerate în blocuri pe baza operatorului „case”.

    def http_error(status): match status: case 400: return «Cerere incorectă» case 401|403|404: return «Interzis» case 418: return «Sunt o ceainică» case _: return «Altceva»

    Este posibilă descompunerea obiectelor, tuplelor, listelor și a secvențelor arbitrare pentru legarea variabilelor bazate pe valorile existente. Se permite definirea șabloanelor imbricate, utilizarea unor condiții suplimentare „if” în șablon, aplicarea mascadelor („[x, y, *rest]”), maparea asocierilor cheie/valoare (de exemplu, {„bandwidth”: b, „latency”: l} pentru extragerea valorilor „bandwidth” și „latency” din dicționar), extragerea sub-șabloanelor (operatorul „:=”), utilizarea constantelor denumite în șablon. În clase, este posibilă configurarea comportamentului la potrivire utilizând metoda „__match__()”.

    from dataclasses import dataclass @dataclass class Point: x: int y: int def whereis(point): match point: case Point(0, 0): print(„Origine”) case Point(0, y): print(f„Y={y}”) case Point(x, 0): print(f„X={x}”) case Point(): print(„O altă locație”) case _: print(„Nu este un punct”) match point: case Point(x, y) if x == y: print(f„Y=X la {x}”) case Point(x, y): print(f„Nu este pe diagonală”) RED, GREEN, BLUE = 0, 1, 2 match color: case RED: print(„Văd roșu!”) case GREEN: print(„Iarba este verde”) case BLUE: print(„Mă simt melancolic :(“)

  • A fost oferită posibilitatea de a folosi paranteze în operatorul with pentru a separa declarațiile grupate de manageri de context pe mai multe linii. De asemenea, este permisă lăsarea unei virgule după ultimul manager de context din grup: with ( CtxManager1() as example1, CtxManager2() as example2, CtxManager3() as example3, ): …
  • A fost îmbunătățită informarea cu privire la locația în cod a erorilor legate de acoladele figura neînchise și citatele în literalele de tip string. De exemplu, în cazul unei acolade figure neînchise, în loc de a informa despre o eroare de sintaxă în construcția ulterioară, pointerul acum evidențiază acolada de deschidere și informează despre lipsa unui bloc de închidere. File „example.py”, line 1 expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4, ^ SyntaxError: „{“ nu a fost niciodată închis

    Au fost adăugate mesaje de eroare sintactică specializate suplimentare: lipsa simbolului „:” înaintea blocului și în dicționare, neîncapsularea tuplului în paranteze, lipsa virgulei în liste, specificarea blocului „try” fără „except” și „finally”, utilizarea „=” în loc de „==” în comparații, specificarea expresiilor *- în f-string-uri. De asemenea, s-a asigurat evidențierea întregii expresii problematice, nu doar a începutului acesteia, și o informare mai clară cu privire la contextul erorilor legate de indentare. >>> def foo(): … if lel: … x = 2 File „”, line 3 x = 2 ^ IndentationError: expected an indented block after ‘if’ statement in line 2

    În erorile cauzate de erori de tipar în numele atributelor și al variabilelor din funcție, s-a asigurat afișarea unei recomandări cu numele corect. >>> collections.namedtoplo Traceback (most recent call last): File „”, line 1, in AttributeError: module ‘collections’ has no attribute ‘namedtoplo’. Did you mean: namedtuple?

  • Pentru instrumentele de depanare și profiler, s-a asigurat indicarea în evenimentele de trasare a numărului exact al liniilor de cod executate.
  • A fost adăugată setarea sys.flags.warn_default_encoding pentru a genera un avertisment cu privire la posibilele erori legate de manipularea în TextIOWrapper și open() a fișierelor în codificare UTF-8 fără a specifica explicit opțiunea ‘encoding=„utf-8”‘ (implicit se utilizează codificarea ASCII). De asemenea, în noul release a fost adăugată posibilitatea specificării valorii ‘encoding=„locale”‘ pentru a seta codificarea în funcție de localele curente.
  • În modulul typing, care oferă instrumente pentru a specifica anotații de tip, a fost adăugat un nou operator care permite utilizarea sintaxei „X | Y” pentru a selecta unul dintre tipuri (tipul X sau tipul Y). def square(number: int | float) -> int | float: return number ** 2 echivalent cu construcția anterior suportată: def square(number: Union[int, float]) -> Union[int, float]: return number ** 2
  • În modulul typing a fost adăugat operatorul Concatenate și variabila ParamSpec, care permit transmiterea informațiilor suplimentare pentru verificarea statică a tipurilor atunci când se utilizează Callable. De asemenea, modulului typing i-au fost adăugate valori speciale TypeGuard pentru a anota funcțiile de protecție a tipurilor și TypeAlias pentru a defini explicit un alias de tip. StrCache: TypeAlias = ‘Cache[str]’ # un alias de tip
  • Funcția zip() implementează o opțiune opțională „strict”, care, atunci când este specificată, verifică dacă argumentele iterabile au același lungime. >>> list(zip((‘a’, ‘b’, ‘c’), (1, 2, 3), strict=True)) [(‘a’, 1), (‘b’, 2), (‘c’, 3)] >>> list(zip(range(3), [‘fee’, ‘fi’, ‘fo’, ‘fum’], strict=True)) Traceback (most recent call last): … ValueError: zip() argument 2 este mai lung decât argument 1
  • Au fost propuse noi funcții încorporate aiter() și anext() cu implementări asincrone echivalente pentru funcțiile iter() și next().
  • Construirea funcțiilor str(), bytes() și bytearray() a fost accelerată cu 30-40% în cazul obiectelor mici.
  • Numărul de operații de import în modulul runpy a fost redus. Comanda „python3 -m nume_modul” este acum în medie cu 1.4 ori mai rapidă datorită reducerii modului importate de la 69 la 51.
  • În instrucțiunea LOAD_ATTR a fost implementat un mecanism de cache pentru opcode-uri, care a permis accelerea lucrului cu atributele obișnuite cu până la 36%, iar cu sloturi cu până la 44%.
  • Când se compilează Python cu opțiunea „—enable-optimizations”, acum se activează modul „-fno-semantic-interposition”, care permite accelerarea lucrului interpretatorului cu până la 30% comparativ cu compilarea cu opțiunea „—enable-shared”.
  • În modulele hashlib și ssl a fost adăugată suportul pentru OpenSSL 3.0.0 și a fost suspendat suportul pentru versiunile OpenSSL mai vechi de 1.1.1.
  • Parserul vechi a fost înlăturat, fiind înlocuit în ramura anterioară cu parserul PEG (Parsing Expression Grammar). Modulul formatter a fost eliminat. Din API asyncio a fost eliminat parametrul loop. Metodele declarate anterior ca fiind învechite au fost eliminat. Funcțiile Py_UNICODE_str*, care manipulează șirurile Py_UNICODE*, au fost eliminate.
  • Modulul distutils a fost declarat învechit și planificat pentru eliminare în Python 3.12. În loc de distutils, se recomandă utilizarea modulelor setuptools, packaging, platform, shutil, subprocess și sysconfig. Structura wstr în PyUnicodeObject a fost, de asemenea, inclusă în categoria celor învechite și planificate pentru eliminare.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster