Programmeerimiskeele Python 3.10 väljaanne

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

Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы 🔥 Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы | ProHoster