Liberazione di a lingua di prugrammazione Python 3.10

Dopu un annu di sviluppu, a liberazione significativa di a lingua di prugrammazione Python 3.10 hè presentata. U novu ramu serà supportatu per un annu è mezu, dopu à quale per altri trè anni è mezu, correzioni seranu generati per eliminà e vulnerabilità.

À u listessu tempu, a prova alfa di u ramu Python 3.11 hà iniziatu (in cunfurmità cù u novu prugramma di sviluppu, u travagliu nantu à un novu ramu principia cinque mesi prima di a liberazione di u ramu precedente è righjunghji u stadiu di prova alfa à u mumentu di a prossima versione). ). U ramu Python 3.11 serà in versione alfa per sette mesi, durante i quali e funzioni novi seranu aghjunte è bug riparati. Dopu questu, e versioni beta seranu pruvati per trè mesi, durante i quali l'aghjunzione di novi funziunalità serà pruibita è tutta l'attenzione serà pagata per risolve i bug. Per l'ultimi dui mesi prima di a liberazione, u ramu serà in u stadiu candidatu di liberazione, in quale a stabilizazione finale serà realizata.

I novi aghjunti à Python 3.10 includenu:

  • Implementati operatori "match" è "casu" per l'abbinamentu di mudelli, chì migliurà a leggibilità di u codice, simplificà l'abbinamentu di l'oggetti Python arbitrari, è aumentanu l'affidabilità di u codice per mezu di cuntrolli avanzati di tippu staticu. L'implementazione hè assai simili à l'operatore "match" furnitu in Scala, Rust è F#, chì compara u risultatu di una espressione specifica cù una lista di mudelli listati in blocchi basati nantu à l'operatore "casu".

    def http_error (status) : match status : case 400 : turnà "Bad request" case 401|403|404: return "Non permessu" case 418: return "Sò una teiera" case _: turnà "Qualcosa d'altru"

    Pudete sbulicà l'uggetti, tuple, listi è sequenze arbitrarie per ligà variabili basati nantu à i valori esistenti. Hè permessu di definisce mudelli nidificati, aduprate cundizioni supplementari "se" in u mudellu, utilizate maschere ("[x, y, *rest]"), mappings chjave / valore (per esempiu, {"larghezza di banda": b, "latency". ”: l} per estrattà i valori di "larghezza di banda" è "latenza" da un dizziunariu), estratti sottumoduli (":=" operatore), utilizate custanti chjamati in un mudellu. In e classi, hè pussibule persunalizà u cumportamentu currispondente cù u metudu "__match__()".

    da classi di dati importa classi di dati @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("Altrò") case _: print("Nè un puntu") match point: case Point(x, y) if x == y: print(f"Y=X at {x}") case Point(x, y): print(f"Not on the diagonal") RED, GREEN, BLUE = 0, 1, 2 match color: case RED: print("Vecu rossu!") Case GREEN: print("L'erba hè verde") case BLUE: print ("Mi sentu u turchinu :(“)

  • Avà hè pussibule aduprà parentesi in a dichjarazione cù per sparte a definizione di una cullizzioni di gestori di cuntestu in parechje linee. Hè ancu permessu di lascià una virgola dopu à u manager di cuntestu finali in u gruppu: cù ( CtxManager1 () cum'è esempiu1, CtxManager2 () cum'è esempiu2, CtxManager3 () cum'è esempiu3, ): ...
  • Rapportu migliuratu di u locu di u codice di l'errori ligati à parentesi unclosed è quotes in string literals. Per esempiu, quandu ci hè un brace unclosed, invece di signalà un errore di sintassi in a custruzzione seguente, l'indicatore ora mette in risaltu u brace di apertura è indica chì ùn ci hè micca un bloccu di chjusu. File "example.py", a linea 1 prevista = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' mai statu chjusu

    Aghjunghjite messagi d'errore di sintassi specializati supplementari: simbulu ":" mancante prima di un bloccu è in dizziunari, micca siparà una tupla cù parentesi, manca una virgola in listi, specificendu un bloccu "prova" senza "eccettu" è "finalmente", usendu "=". " invece di "= =" in paraguni, specificendu *-espressioni in f-strings. Inoltre, assicura chì tutta l'espressione problematica hè evidenziata, micca solu l'iniziu, è infurmazioni più esplicite nantu à u cuntestu di l'errori assuciati cù indentazione incorrecta. >>> def foo(): ... if lel: ... x = 2 File " ", line 3 x = 2 ^ IndentationError: s'aspittava un bloccu indentatu dopu a dichjarazione "se" in a linea 2

    In errori causati da typos in i nomi di l'attributi è i nomi di variàbili in una funzione, una ricunniscenza cù u nome currettu hè uscita. >>> collections.namedtoplo Traceback (ultima chiamata recente): File « ", linea 1, in AttributeError: u modulu "collections" ùn hà micca attributu "namedtoplo". Intendevi: namedtuple ?

  • Per i strumenti di debugging è i prufilatori, l'avvenimenti di traccia sò furniti cù i numeri di linea esatti di codice eseguitu.
  • Aggiuntu u paràmetru sys.flags.warn_default_encoding per visualizà un avvirtimentu annantu à l'errori potenziali assuciati cù TextIOWrapper è open() chì processanu i fugliali codificati UTF-8 senza specificà esplicitamente l'opzione "encoding =»utf-8" (a codificazione ASCII hè aduprata per difettu) . A nova versione furnisce ancu a capacità di specificà un valore 'encoding="locale"' per stabilisce a codificazione basatu annantu à a locale attuale.
  • Un novu operatore hè statu aghjuntu à u modulu di typing, chì furnisce strumenti per specificà annotazioni di tipu, chì permettenu l'usu di a sintassi "X | Y" per selezziunà unu di i tipi (Tipu X o tipu Y). def square(number: int | float) -> int | float: numeru di ritornu ** 2 hè equivalente à a custruzzione supportata prima: def square (number: Union[int, float]) -> Union[int, float]: numeru di ritornu ** 2
  • L'operatore Concatenate è a variabile ParamSpec sò stati aghjuntu à u modulu di typing, chì permettenu di passà infurmazioni supplementari per a verificazione di u tipu staticu quandu si usa Callable. U modulu di typing aghjunghje ancu valori speciali TypeGuard per annotà e funzioni di prutezzione di u tipu è TypeAlias ​​per definisce esplicitamente un alias di tipu. StrCache: TypeAlias ​​​​= 'Cache[str]' # un alias di tipu
  • A funzione zip() implementa una bandiera "stritta" opzionale, chì, quandu hè specificata, verifica se l'argumenti chì sò iterati sò a stessa lunghezza. >>> 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 (ultima chiamata recente ): … ValueError: zip() l'argumentu 2 hè più longu di l'argumentu 1
  • Nove funzioni integrate aiter () è anext () sò pruposte cù l'implementazione di analoghi asincroni à e funzioni iter () è next ().
  • U travagliu di i custruttori str (), bytes () è bytearray () quandu u travagliu cù oggetti chjuchi hè statu acceleratu da 30-40%.
  • Riduce u numeru di operazioni di impurtazione in u modulu runpy. U cumandamentu "python3 -m module_name" ora corre in media 1.4 volte più veloce per via di a riduzione di moduli impurtati da 69 à 51.
  • L'istruzzioni LOAD_ATTR usa un mecanismu di caching per l'opcodes individuali, chì hà permessu di accelerà u travagliu cù attributi regulari finu à 36%, è cù slots finu à 44%.
  • Quandu custruisce Python cù l'opzione "--enable-optimizations", u modu "-fno-semantic-interposition" hè issa attivatu, chì permette di accelerà l'interprete finu à u 30% cumparatu cù a custruzzione cù u "--enable-shared". "opzione.
  • I moduli hashlib è ssl anu aghjustatu supportu per OpenSSL 3.0.0 è cessatu di supportà e versioni OpenSSL più vechje di 1.1.1.
  • U vechju parser hè statu sguassatu, chì hè statu rimpiazzatu in u ramu precedente da u parser PEG (Parsing Expression Grammar). U modulu di formatatore hè statu eliminatu. U paràmetru di loop hè statu eliminatu da l'API asyncio. I metudi chì eranu obsoleti prima sò stati eliminati. E funzioni Py_UNICODE_str* chì manipulanu e stringhe Py_UNICODE* sò state eliminate.
  • U modulu distutils hè statu deprecatu è hè programatu per a rimuzione in Python 3.12. Invece di distutils, hè cunsigliatu di utilizà i setuptools, packaging, platform, shutil, subprocess è moduli sysconfig. A struttura wstr in PyUnicodeObject hè stata deprecata è pianificata per a rimozione.

Source: opennet.ru

Add a comment