ProgrammēŔanas valodas Python 3.10 izlaiŔana

Pēc gada izstrādes tiek prezentēts nozÄ«mÄ«gs Python 3.10 programmÄ“Å”anas valodas izlaidums. Jaunā filiāle tiks atbalstÄ«ta pusotru gadu, pēc tam vēl trÄ«sarpus gadi tai tiks izstrādāti ievainojamÄ«bu novērÅ”anai.

Tajā paŔā laikā sākās Python 3.11 filiāles alfa testÄ“Å”ana (saskaņā ar jauno izstrādes grafiku darbs pie jaunas filiāles sākas piecus mēneÅ”us pirms iepriekŔējās filiāles izlaiÅ”anas un sasniedz alfa testÄ“Å”anas stadiju lÄ«dz nākamās izlaiÅ”anas brÄ«dim ). Python 3.11 atzars alfa versijā bÅ«s septiņus mēneÅ”us, kuru laikā tiks pievienotas jaunas funkcijas un izlabotas kļūdas. Pēc tam beta versijas tiks testētas trÄ«s mēneÅ”us, kuru laikā jaunu funkciju pievienoÅ”ana bÅ«s aizliegta un visa uzmanÄ«ba tiks pievērsta kļūdu laboÅ”anai. Pēdējos divus mēneÅ”us pirms izlaiÅ”anas filiāle bÅ«s izlaiduma kandidāta stadijā, kurā tiks veikta galÄ«gā stabilizācija.

Jaunie Python 3.10 papildinājumi ietver:

  • Ieviesti operatori "match" un "case" modeļu saskaņoÅ”anai, kas uzlabo koda lasāmÄ«bu, vienkārÅ”o patvaļīgu Python objektu saskaņoÅ”anu un palielina koda uzticamÄ«bu, izmantojot uzlaboto statisko tipa pārbaudi. ÄŖstenoÅ”ana lÄ«dzinās Scala, Rust un F# nodroÅ”inātajam operatoram "match", kas salÄ«dzina noteiktas izteiksmes rezultātu ar modeļu sarakstu, kas uzskaitÄ«ts blokos, pamatojoties uz operatoru "case".

    def http_error(status): atbilstÄ«bas statuss: 400. gadÄ«jums: atgriezt ā€œSlikts pieprasÄ«jumsā€ 401. gadÄ«jums|403|404: atgriezties ā€œNav atļautsā€ 418. gadÄ«jums: atgriezties ā€œEs esmu tējkannaā€ gadÄ«jums _: atgriezt ā€œKaut kas citsā€

    Varat izpakot objektus, koreÅ”us, sarakstus un patvaļīgas secÄ«bas, lai saistÄ«tu mainÄ«gos, pamatojoties uz esoÅ”ajām vērtÄ«bām. Ir atļauts definēt ligzdotas veidnes, veidnē izmantot papildu ā€œifā€ nosacÄ«jumus, izmantot maskas (ā€œ[x, y, *rest]ā€), atslēgu/vērtÄ«bu kartējumus (piemēram, {ā€œjoslas platumsā€: b, ā€œlatencyā€ ā€: l}, lai no vārdnÄ«cas izvilktu "joslas platuma" un "latences" vērtÄ«bas, izvilktu apakÅ”veidnes (operators ":="), veidnē izmantojiet nosauktās konstantes. Klasēs ir iespējams pielāgot atbilstÄ«bas uzvedÄ«bu, izmantojot metodi ā€œ__match__()ā€.

    no datu klasēm importēt datu klasi @datuklase klase Punkts: x: int y: int def whereis(point): atbilstības punkts: reģistrs Punkts(0, 0): print("Izcelsme") case Point(0, y): print(f" Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Kur citur") case _: print("Nav punkts") atbilstība punkts: reģistrs Punkts(x, y) ja x == y: drukāt(f"Y=X pie {x}") gadījums Punkts(x, y): drukāt(f"Nav pa diagonāli") SARKANS, ZAĻS, ZILS = 0, 1, 2 atbilst krāsai: korpuss SARKANS: drukas ("Es redzu sarkanu!") korpuss ZAĻS: drukas ("Zāle ir zaļa") korpuss ZILS: druka("Es jūtu blūzu :(")

  • Tagad ir iespējams izmantot iekavas priekÅ”rakstā ar, lai sadalÄ«tu konteksta pārvaldnieku kolekcijas definÄ«ciju vairākās rindās. Ir atļauts arÄ« atstāt komatu aiz pēdējā konteksta pārvaldnieka grupā: ar ( CtxManager1() kā example1, CtxManager2() kā example2, CtxManager3() kā example3, ): ...
  • Uzlabota ziņoÅ”ana par koda atraÅ”anās vietu kļūdām, kas saistÄ«tas ar neaizvērtām iekavām un pēdiņām virkņu literāļos. Piemēram, ja ir neaizslēgta figÅ«rieka, tā vietā, lai ziņotu par sintakses kļūdu nākamajā konstrukcijā, rādÄ«tājs tagad izceļ sākuma figÅ«riekavu un norāda, ka nav noslēguma bloka. Fails "example.py", paredzamā 1. rindiņa = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^Sintakses kļūda: '{' nekad nav bijis slēgts

    Pievienoti papildu specializēti sintakses kļūdu ziņojumi: pirms bloka un vārdnÄ«cās trÅ«kst simbola ":", korte nav atdalÄ«ta ar iekavām, sarakstos trÅ«kst komata, norādÄ«ts "izmēģināt" bloks bez "izņemot" un "beidzot", izmantojot "=" "=" vietā salÄ«dzinājumos, norādot *-izteiksmes f-stringos. Turklāt tas nodroÅ”ina, ka tiek izcelta visa problemātiskā izteiksme, nevis tikai sākums, un tiek sniegta precÄ«zāka informācija par kļūdu kontekstu, kas saistÄ«ts ar nepareizu atkāpi. >>> def foo(): ... if lel: ... x = 2 fails " ", 3. rinda x = 2 ^ IndentationError: sagaidāms atkāpes bloks aiz priekÅ”raksta "if" 2. rindā

    Kļūdu gadÄ«jumā, ko izraisa drukas kļūdas funkcijas atribÅ«tu un mainÄ«go nosaukumos, tiek izvadÄ«ts ieteikums ar pareizo nosaukumu. >>>collections.namedtoplo Traceback (pēdējais zvans pēdējais): Fails Ā« ", 1. rinda, in AttributeError: modulim ā€œcollectionsā€ nav atribÅ«ta ā€œnamedtoploā€. Vai domājāt: namedtuple?

  • AtkļūdoÅ”anas rÄ«kiem un profilētājiem izsekoÅ”anas notikumi tiek nodroÅ”ināti ar precÄ«ziem izpildÄ«tā koda rindu numuriem.
  • Pievienots iestatÄ«jums sys.flags.warn_default_encoding, lai parādÄ«tu brÄ«dinājumu par iespējamām kļūdām, kas saistÄ«tas ar TextIOWrapper un open() apstrādi UTF-8 kodētiem failiem, skaidri nenorādot opciju 'encoding=Ā»utf-8ā€³ (pēc noklusējuma tiek izmantots ASCII kodējums). . Jaunais laidiens nodroÅ”ina arÄ« iespēju norādÄ«t 'encoding="locale"' vērtÄ«bu, lai iestatÄ«tu kodējumu, pamatojoties uz paÅ”reizējo lokalizāciju.
  • RakstÄ«Å”anas modulim ir pievienots jauns operators, kas nodroÅ”ina rÄ«kus tipa anotāciju norādÄ«Å”anai, ļaujot izmantot sintaksi ā€œX | Y", lai atlasÄ«tu vienu no veidiem (X tips vai Y tips). def kvadrāts(skaitlis: int | peldēt) -> int | pludiņŔ: atgrieÅ”anas numurs ** 2 ir lÄ«dzvērtÄ«gs iepriekÅ” atbalstÄ«tajai konstrukcijai: def square(skaitlis: Union[int, float]) -> Union[int, float]: atgrieÅ”anas numurs ** 2
  • RakstÄ«Å”anas modulim ir pievienots operators Concatenate un mainÄ«gais ParamSpec, kas ļauj nodot papildu informāciju statiskai tipa pārbaudei, izmantojot Callable. RakstÄ«Å”anas modulis arÄ« pievieno Ä«paÅ”as vērtÄ«bas TypeGuard, lai komentētu tipa aizsardzÄ«bas funkcijas, un TypeAlias, lai skaidri definētu tipa aizstājvārdu. StrCache: TypeAlias = 'KeÅ”atmiņa[str]' # tipa aizstājvārds
  • Funkcija zip () ievieÅ” neobligātu ā€œstingruā€ karogu, kas, kad tas ir norādÄ«ts, pārbauda, ā€‹ā€‹vai atkārtojamie argumenti ir vienāda garuma. >>> 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 (pēdējais zvans ): ā€¦ ValueError: zip() 2. arguments ir garāks par 1. argumentu
  • Tiek piedāvātas jaunas iebÅ«vētās funkcijas aiter() un anext(), ievieÅ”ot asinhronus analogus funkcijām iter() un next().
  • Str(), bytes() un bytearray() konstruktoru darbs, strādājot ar maziem objektiem, ir paātrināts par 30-40%.
  • Samazināts importÄ“Å”anas darbÄ«bu skaits palaistajā modulÄ«. Komanda "python3 -m moduļa_nosaukums" tagad darbojas vidēji 1.4 reizes ātrāk, jo importēto moduļu skaits ir samazināts no 69 uz 51.
  • Instrukcija LOAD_ATTR izmanto atseviŔķu opkodu keÅ”atmiņas mehānismu, kas ļāva paātrināt darbu ar parastajiem atribÅ«tiem lÄ«dz pat 36%, bet ar slotiem lÄ«dz pat 44%.
  • Veidojot Python ar opciju ā€œ--enable-optimizationsā€, tagad ir iespējots režīms ā€œ-fno-semantic-interpositionā€, kas ļauj paātrināt tulka darbÄ«bu lÄ«dz pat 30%, salÄ«dzinot ar veidoÅ”anu, izmantojot ā€œ--enable-sharedā€. ā€ opciju.
  • Hashlib un ssl moduļiem ir pievienots OpenSSL 3.0.0 atbalsts, un tie vairs neatbalsta OpenSSL versijas, kas vecākas par 1.1.1.
  • Vecais parsētājs ir noņemts, kas iepriekŔējā filiālē tika aizstāts ar PEG (Parsing Expression Grammar) parsētāju. Formatētāja modulis ir noņemts. Cilpas parametrs ir noņemts no asyncio API. Metodes, kas iepriekÅ” tika nolietotas, ir noņemtas. Funkcijas Py_UNICODE_str*, kas manipulē ar Py_UNICODE* virknēm, ir noņemtas.
  • Distutils modulis ir novecojis, un to ir paredzēts noņemt no Python 3.12. Distutils vietā ieteicams izmantot iestatÄ«Å”anas rÄ«kus, iepakojumu, platformu, shutil, apakÅ”procesu un sysconfig moduļus. PyUnicodeObject wstr struktÅ«ra ir novecojusi, un to ir plānots noņemt.

Avots: opennet.ru

Pievieno komentāru