Programmeerimiskeele Python 3.10 väljalase

Pärast aastast arendustööd esitletakse Python 3.10 programmeerimiskeele olulist väljalaset. Uut haru toetatakse poolteist aastat, seejärel töötatakse selle jaoks veel kolm ja pool aastat välja, et turvaauke parandada.

Samal ajal algas Python 3.11 haru alfatestimine (uue arendusgraafiku kohaselt algab töö uue haruga viis kuud enne eelmise haru väljaandmist ja jõuab alfa testimise faasi järgmise väljalaske ajaks ). Python 3.11 haru on alfaväljaandes seitse kuud, mille jooksul lisatakse uusi funktsioone ja parandatakse vigu. Pärast seda testitakse beetaversioone kolm kuud, mille jooksul on uute funktsioonide lisamine keelatud ning kogu tähelepanu pööratakse vigade parandamisele. Viimased kaks kuud enne väljalaskmist on haru väljalaskekandidaatide staadiumis, mille käigus viiakse läbi lõplik stabiliseerimine.

Python 3.10 uued täiendused hõlmavad järgmist:

  • Mustri sobitamiseks on juurutatud operaatorid "match" ja "case", mis parandavad koodi loetavust, lihtsustavad suvaliste Pythoni objektide sobitamist ja suurendavad koodi usaldusväärsust täiustatud staatilise tüübikontrolli kaudu. Rakendus sarnaneb paljuski Scala, Rust ja F# pakutavale operaatorile "match", mis võrdleb määratud avaldise tulemust plokkides loetletud mustrite loendiga operaatori "case" alusel.

    def http_error(status): vaste olek: juhtum 400: tagastada "Halb taotlus" juhtum 401|403|404: tagastada "Pole lubatud" juhtum 418: tagastada "Ma olen teekann" juhtum _: tagastada "Midagi muud"

    Olemasolevate väärtuste alusel muutujate sidumiseks saate lahti pakkida objekte, kortereid, loendeid ja suvalisi jadasid. Lubatud on defineerida pesastatud malle, kasutada mallis täiendavaid "if" tingimusi, kasutada maske ("[x, y, *rest]"), võtme/väärtuse vastendusi (näiteks {"bandwidth": b, "latency" ”: l}, et eraldada sõnastikust väärtused "ribalaius" ja "latentsusaeg", ekstraktida alammalle (operaator ":="), kasutada mallis nimega konstante. Klassides on võimalik sobitamiskäitumist kohandada kasutades meetodit “__match__()”.

    andmeklassidest import andmeklass @ andmeklass klass Punkt: x: int y: int def whereis(punkt): vastepunkt: suurtäht Punkt(0, 0): print("Origin") case Point(0, y): print(f" Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Kuskil mujal") case _: print("Pole point") vaste punkt: suurtäht Punkt(x, y) if x == y: print(f"Y=X at {x}") case Point(x, y): print(f"ei ole diagonaalil") PUNANE, ROHELINE, SININE = 0, 1, 2 vaste värv: ümbris PUNANE: print("Ma näen punast!") ümbris ROHELINE: print("Muru on roheline") ümbris SININE: print("Ma tunnen sinist :(")

  • Nüüd on koos-lauses võimalik kasutada sulgusid, et jagada kontekstihaldurite kogumi määratlus mitmele reale. Samuti on lubatud grupis viimase kontekstihalduri järele koma jätta: koos ( CtxManager1() kui näide1, CtxManager2() kui näide2, CtxManager3() kui näide3, ): ...
  • Täiustatud aruandlus stringiliteraalide sulgemata sulgude ja jutumärkidega seotud vigade koodi asukohast. Näiteks kui on olemas sulgemata sulg, siis selle asemel, et teatada järgmise konstruktsiooni süntaksiveast, tõstab kursor nüüd esile avasulu ja näitab, et sulgemisplokki pole. Fail "example.py", oodatav rida 1 = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^Süntaksiviga: '{' polnud kunagi suletud

    Lisatud on täiendavad spetsiaalsed süntaksi veateated: ploki ees ja sõnaraamatutes puudub sümbol ":", korteeži ei eraldata sulgudega, loendites puudub koma, määratakse "proovi" plokk ilma "välja arvatud" ja "lõpuks", kasutades "=" "= =" asemel võrdlustes, täpsustades *-avaldised f-stringides. Lisaks tagab see, et esile tõstetakse kogu probleemne avaldis, mitte ainult algus, ja täpsem teave vale taandega seotud vigade konteksti kohta. >>> def foo(): … if lel: … x = 2 Fail “”, rida 3 x = 2 ^ IndentationError: oodatakse taandega plokki pärast lauset ‘if’ real 2

    Funktsiooni atribuutide ja muutujate nimede kirjavigadest põhjustatud vigade korral väljastatakse õige nimega soovitus. >>> collections.namedtoplo Traceback (viimane kõne viimane): Fail "", rida 1, jaotises AttributeError: moodulil 'collections' pole atribuuti 'namedtoplo'. Kas mõtlesite: namedtuple?

  • Silumistööriistade ja profileerijate jaoks on jälgimissündmused varustatud käivitatud koodi täpsete reanumbritega.
  • Lisatud säte sys.flags.warn_default_encoding, et kuvada hoiatus võimalike vigade kohta, mis on seotud TextIOWrapperiga ja open() UTF-8 kodeeringuga failide töötlemisega, ilma et oleks selgesõnaliselt määratud suvandit „encoding=»utf-8” (vaikimisi kasutatakse ASCII-kodeeringut). Uus väljalase annab ka võimaluse määrata kodeeringu määramiseks praeguse lokaadi alusel 'encoding="locale" väärtus.
  • Tippimismoodulisse on lisatud uus operaator, mis pakub tööriistu tüübiannotatsioonide määramiseks, võimaldades kasutada süntaksit “X | Y", et valida üks tüüp (X-tüüpi või Y-tüüpi). def ruut(arv: int | float) -> int | ujuk: tagastusarv ** 2 on samaväärne varem toetatud konstruktsiooniga: def ruut(arv: Liit[int, ujuk]) -> Liit[int, ujuk]: tagastamisnumber ** 2
  • Tippimismoodulisse on lisatud operaator Concatenate ja muutuja ParamSpec, mis võimaldavad Callable kasutamisel edastada lisateavet staatiliseks tüübikontrolliks. Tippimismoodul lisab ka spetsiaalsed väärtused TypeGuard tüübikaitsefunktsioonide märkimiseks ja TypeAlias, et tüübialiase selgesõnaliselt määratleda. StrCache: TypeAlias = ‘Vahemälu[str]’ # tüübialias
  • Funktsioon zip() rakendab valikulist "range" lippu, mis määramisel kontrollib, kas itereeritavad argumendid on sama pikkusega. >>> list(zip(('a', 'b', 'c'), (1, 2, 3), range=True)) [('a', 1), ('b', 2) , ('c', 3)] >>> list(zip(range(3), ['fee', 'fi', 'fo', 'fum'], strict=True)) Traceback (viimane kõne viimane ): … ValueError: zip() argument 2 on pikem kui argument 1
  • Pakutakse välja uued sisseehitatud funktsioonid aiter() ja anext() funktsioonide iter() ja next() asünkroonsete analoogidega.
  • Str(), bytes() ja bytearray() konstruktorite töö väikeste objektidega töötamisel on kiirenenud 30-40%.
  • Käivitusmoodulis on imporditoimingute arv vähenenud. Käsk "python3 -m mooduli_nimi" töötab nüüd keskmiselt 1.4 korda kiiremini tänu imporditud moodulite arvu vähendamisele 69-lt 51-le.
  • Käsk LOAD_ATTR kasutab üksikute opkoodide vahemällu salvestamise mehhanismi, mis võimaldas tavaliste atribuutidega tööd kiirendada kuni 36% ja pesadega kuni 44%.
  • Pythoni loomisel valikuga "--enable-optimizations" on nüüd lubatud "-fno-semantic-interposition" režiim, mis võimaldab tõlkimist kiirendada kuni 30% võrreldes "--enable-shared" loomisega. ” valik.
  • Hashlib ja ssl moodulid on lisanud OpenSSL 3.0.0 toe ja lõpetanud OpenSSL-i versioonide toetamise, mis on vanemad kui 1.1.1.
  • Vana parser on eemaldatud, mis asendati eelmises harus PEG (Parsing Expression Grammar) parseriga. Vormindamismoodul on eemaldatud. Silmuse parameeter on asyncio API-st eemaldatud. Varem aegunud meetodid on eemaldatud. Funktsioonid Py_UNICODE_str*, mis manipuleerivad Py_UNICODE* stringe, on eemaldatud.
  • Distutilsi moodul on aegunud ja eemaldatakse Python 3.12-st. Distutils'i asemel on soovitatav kasutada seadistustööriistu, pakendit, platvormi, shutili, alamprotsessi ja sysconfig mooduleid. PyUnicodeObjecti wstr-struktuur on aegunud ja eemaldamiseks on plaanitud.

Allikas: opennet.ru

Lisa kommentaar