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