PĂ€rast aasta arengut on vĂ€lja antud mĂ€rkimisvÀÀrne Python 3.10 programmeerimiskeele versioon. Uut haru toetatakse ĂŒhe ja poole aasta jooksul, millele jĂ€rgneb veel kolm ja pool aastat turvavigade paranduste tegemiseks.
Samas algas Python 3.11 haru alfa-testimine (vastavalt uuele arenduskavale algab töö uue haru kallal viis kuud enne eelmine versioon ja jÔuab alfa-testimise etappi eelviimase versiooni vabastamise ajaks). Python 3.11 haru jÀÀb alfa-vÀljaannete staadiumisse seitsmeks kuuks, mille jooksul lisatakse uusi funktsioone ja parandatakse vigu. SeejÀrel toimub kolme kuu jooksul beetaversioonide testimine, mille ajal uusi funktsioone ei lubata ja kogu tÀhelepanu keskendub vigade parandamisele. Viimased kaks kuud enne vabastamist viib haru lÀbi kandidaadi vabastamisetapi, mille kÀigus toimub lÔplik stabiilsuse tagamine.
Python 3.10 uutest omadustest on:
- On rakendatud "match" ja "case" operaatorid, mis vĂ”imaldavad mustrite abil osutamist, parandades koodi loetavust, lihtsustades erinevate Python-objektide vastavust ja suurendades koodi usaldusvÀÀrsust laiendatud staatiliste tĂŒĂŒpide kontrollimise vĂ”imaluse kaudu. Teostus meenutab tugevalt "match" operaatorit, mida pakutakse keeles nagu Scala, Rust ja F#, mis vĂ”rdleb antud vĂ€ljendi tĂ€itmise tulemust nimekirja mustritega, mis on loetletud "case" operaatorist lĂ€htuvates plokkides.
def http_error(status): match status: case 400: return "Halb pÀring" case 401|403|404: return "Pole lubatud" case 418: return "Ma olen teekannu" case _: return "Midagi muud"
Objekte, tupel, loendid ja suvalised jÀrjestused on vÔimalik lahti pakkida muutuja sidumise pÔhjal olemasolevate vÀÀrtuste pÔhjal. Lubatud on siseste mallide mÀÀramine, tÀiendavate "if" tingimuste kasutamine mallis, maskide rakendamine ("[x, y, *rest]"), vÔtme/vÀÀrtuse paaride kaardistamine (nÀiteks {"bandwidth": b, "latency": l}, et ekstraheerida vÀÀrtused "bandwidth" ja "latency" sÔnastikust), alammallide eraldamine (operaator ":="), nimetatud konstantide kasutamine mallis. Klassides on vÔimalik mÀÀrata sobitamise kÀitumist meetodi "__match__()" abil.
from dataclasses import dataclass @dataclass class Point: x: int y: int def whereis(point): match point: case Point(0, 0): print("Origin") case Point(0, y): print(f"Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Somewhere else") case _: print("Not a point") 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("I see red!") case GREEN: print("Grass is green") case BLUE: print("Iâm feeling the blues :(")
- Pakutakse vĂ”imalust kasutada ringikujulisi sulge, et jaotada kontekstihaldurite kogu mÀÀratlemine mitmele reale. Samuti on lubatud jĂ€tta viimane kontekstihaldur rĂŒhmas komaga: with ( CtxManager1() as example1, CtxManager2() as example2, CtxManager3() as example3, ): âŠ
- Parandati koodis vigade teateid, mis olid seotud sulgemata sĂŒmbolite ja jutumĂ€rkidega stringide kirjeldustes. NĂ€iteks, kui sulgemata sĂŒmbol esineb, ei teavitata nĂŒĂŒd sĂŒntaksi vea kohta jĂ€rgnevates konstruktsioonides, vaid nĂ€idatakse avanev sĂŒmbol ja teavitatakse sulguva ploki puudumisest. File "example.py", line 1 expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4, ^ SyntaxError: '{' was never closed
Lisa on lisatud tĂ€iendavad spetsialiseeritud sĂŒntaksiveateated: puuduolev â:â sĂŒdamiku ja sĂ”naraamatute ees, tupleâite mitte eristamine sulgudega, puuduvad komad loendites, âtryâ bloki mÀÀramine ilma âexceptâ ja âfinallyâ osadeta, â=â kasutamine vĂ”rreldes â==â asemel, *-avaldised f-reas. Samuti on tagatud, et kogu probleemne avaldis on esile tĂ”stetud, mitte ainult selle algus, ning selgem teavitamine kontekstivead, mis on seotud vale sisestuse paigutamine.
Vigade korral, mis tulenevad atribuutide ja funktsioonide muutuja nimede Ă”igekirjavigadest, pakutakse soovitust Ă”ige nimega. >>> collections.namedtoplo Traceback (viimase kestva kĂ€tteandmine): Fail ââ, rida 1, moodul â<module>â AttributeError: moodul âcollectionsâ ei oma atribuuti ânamedtoploâ. Kas sa mĂ”tlesid: namedtuple?
- TĂ”rkeotsingu tööriistadele ja profiilijatele on tagatud jĂ€lgimise sĂŒndmustes tĂ€psete koodiridade numbrite nĂ€itamine.
- Lisa on seadistus sys.flags.warn_default_encoding, et kuvada hoiatust vĂ”imalike vigade kohta, mis on seotud TextIOWrapperiga ja open() failidega UTF-8 kodeeringus, kui valik âencoding=âutf-8ââ ei ole selgesĂ”naliselt mÀÀratud (vaikimisi kasutatakse ASCII kodeeringut). Samuti on uues vĂ€ljaandes antud vĂ”imalus mÀÀrata vÀÀrtus âencoding=âlocaleââ, et seadistada kodeering vastavalt praegusele lokaadile.
- Typping moodulisse, mis pakub vahendeid tĂŒĂŒpide annotatsioonide mÀÀramiseks, on lisatud uus operaator, mis vĂ”imaldab kasutada sĂŒntaksit âX | Yâ ĂŒhe liikide valimiseks (tĂŒĂŒp X vĂ”i tĂŒĂŒp Y). def square(number: int | float) -> int | float: return number ** 2 vastab varem toetatud konstruktsioonile: def square(number: Union[int, float]) -> Union[int, float]: return number ** 2
- Typping moodulisse on lisatud operaator Concatenate ja muutuja ParamSpec, mis vĂ”imaldavad edastada tĂ€iendavat teavet tĂŒĂŒpide staatiliseks kontrollimiseks Callableâi kasutamisel. Typping moodulisse on lisatud ka spetsiaalsed vÀÀrtused TypeGuard tĂŒĂŒpide kaitse funktsioonide annotatsiooniks ja TypeAlias tĂŒĂŒbi pseudonĂŒĂŒmi selgeks mÀÀramiseks. StrCache: TypeAlias = âCache[str]â # tĂŒĂŒbi alias
- Zip() funktsioonis on rakendatud valikuline "strict" lipp, mille mÀÀramisel kontrollitakse, et argumendi pikkused oleksid samad. >>> 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 is longer than argument 1
- Uued sisseehitatud funktsioonid aiter() ja anext() on esitatud, pakkudes asĂŒnkroonneid analooge funktsioonidele iter() ja next().
- Str(), bytes() ja bytearray() konstruktorite töö kiirus on 30-40% paranenud vÀikeste objektide töötlemisel.
- Mooduli runpy importimise operatsioonide arvu on vĂ€hendatud. KĂ€sk "python3 -m moodulinimi" kĂ€ivitatakse nĂŒĂŒd keskmiselt 1,4 korda kiiremini importitavate moodulite arvu vĂ€hendamise tĂ”ttu 69-lt 51-le.
- LOAD_ATTR kĂ€su puhul on kasutusele vĂ”etud ĂŒksikute opkoodide vahemĂ€lu mehhanism, mille abil on tavade atribuutidega töötlemise kiirus paranenud kuni 36%, ning slottidega kuni 44%.
- Pythonit ehitades, kui kasutada valikut "--enable-optimizations", aktiveeritakse reĆŸiim "-fno-semantic-interposition", mis vĂ”imaldab interpretatsiooni kiirusel vĂ”rreldes "--enable-shared" valikuga saavutada kuni 30% tĂ€iustusi.
- Moodulites hashlib ja ssl on lisatud OpenSSL 3.0.0 tugi ning vanemaid OpenSSL versioone, mis on vanemad kui 1.1.1, enam ei toetata.
- Vana parser on eemaldatud, mille asemel eelmisel harul tutvustati PEG (Parsing Expression Grammar) parserit. Moodul formatter on eemaldatud. API-s asyncio on eemaldatud parameeter loop. Eemaldatud on meetodid, mis olid varem deklareeritud aegunuks. Eemaldatud on funktsioonid Py_UNICODE_str*, mis manipuleerivad Py_UNICODE* stringidega.
- Moodul distutils on deklareeritud aegunuks ning see on plaanitud eemaldada Python 3.12-s. Distutils asemel soovitatakse kasutada mooduleid setuptools, packaging, platform, shutil, subprocess ja sysconfig. Wstr struktuur on samuti kutsutud aegunuks ja on planeeritud eemaldamiseks.
Allikas: opennet.ru
