Utgivelse av programmeringsspråket Python 3.10

Etter et år med utvikling presenteres den betydelige utgivelsen av programmeringsspråket Python 3.10. Den nye grenen vil bli støttet i ett og et halvt år, hvoretter det i ytterligere tre og et halvt år vil bli generert reparasjoner for å eliminere sårbarheter.

Samtidig begynte alfa-testing av Python 3.11-grenen (i samsvar med den nye utviklingsplanen, begynner arbeidet med en ny gren fem måneder før utgivelsen av forrige gren og når alfa-teststadiet ved tidspunktet for neste utgivelse ). Python 3.11-grenen vil være i alfa-utgivelse i syv måneder, hvor nye funksjoner vil bli lagt til og feil fikset. Etter dette vil betaversjoner bli testet i tre måneder, hvor det er forbudt å legge til nye funksjoner, og all oppmerksomhet vil bli viet til å fikse feil. De siste to månedene før utgivelsen vil filialen være på utgivelseskandidatstadiet, hvor den endelige stabiliseringen vil bli utført.

Nye tillegg til Python 3.10 inkluderer:

  • Implementerte "match" og "case"-operatorer for mønstertilpasning, som forbedrer kodelesbarheten, forenkler matching av vilkårlige Python-objekter og øker kodens pålitelighet gjennom avansert statisk typekontroll. Implementeringen er mye lik "match"-operatoren gitt i Scala, Rust og F#, som sammenligner resultatet av et spesifisert uttrykk med en liste over mønstre oppført i blokker basert på "case"-operatoren.

    def http_error(status): match status: case 400: return “Bad request” case 401|403|404: return “Not allowed” case 418: return “I'm a teapot” case _: return “Something else”

    Det er mulig å pakke ut objekter, tupler, lister og vilkårlige sekvenser for å binde variabler basert på eksisterende verdier. Det er tillatt å definere nestede maler, bruke ytterligere "hvis"-betingelser i malen, bruke masker ("[x, y, *rest]"), nøkkel-/verditilordninger (for eksempel {"båndbredde": b, "latency" ”: l} for å trekke ut "båndbredde" og "latens"-verdier fra en ordbok), trekke ut undermaler (":=" operator), bruk navngitte konstanter i en mal. I klasser er det mulig å tilpasse samsvarsatferd ved å bruke "__match__()"-metoden.

    fra dataklasser importer dataklasse @dataklasse klasse Punkt: x: int y: int def whereis(point): match point: case Point(0, 0): print("Origin") case Point(0, y): print(f" Y={y}") kasus Punkt(x, 0): print(f"X={x}") kasus Point(): print("Et annet sted") kasus _: print("Ikke et punkt") samsvarer punkt: sak Punkt(x, y) hvis x == y: print(f"Y=X ved {x}") kasus Punkt(x, y): print(f"Ikke på diagonalen") RØD, GRØNN, BLÅ = 0, 1, 2 match farge: case RØD: print(“Jeg ser rødt!”) case GREEN: print(“Grass er grønn”) case BLUE: print(“I'm feeling the blues :(“)

  • Det er nå mulig å bruke parenteser i with-setningen for å dele definisjonen av en samling kontekstadministratorer på tvers av flere linjer. Det er også tillatt å legge igjen et komma etter den endelige kontekstadministratoren i gruppen: med ( CtxManager1() som eksempel1, CtxManager2() som eksempel2, CtxManager3() som eksempel3, ): ...
  • Forbedret rapportering av kodeplassering av feil relatert til ulukkede klammeparenteser og anførselstegn i strengbokstaver. For eksempel, når det er en ulukket klammeparentes, i stedet for å rapportere en syntaksfeil i følgende konstruksjon, fremhever pekeren nå åpningsparentesen og indikerer at det ikke er noen lukkeblokk. Fil "example.py", linje 1 forventet = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' ble aldri stengt

    Lagt til flere spesialiserte syntaksfeilmeldinger: mangler ":"-symbol før en blokk og i ordbøker, skiller ikke en tuppel med parenteser, mangler et komma i lister, spesifiserer en "prøve"-blokk uten "unntatt" og "endelig", med "= " i stedet for "= =" i sammenligninger, spesifiserer *-uttrykk i f-strenger. I tillegg sikrer det at hele det problematiske uttrykket fremheves, ikke bare begynnelsen, og mer eksplisitt informasjon om konteksten til feil knyttet til feil innrykk. >>> def foo(): ... if lel: ... x = 2 Fil " ", linje 3 x = 2 ^ Indentasjonsfeil: forventet en innrykket blokk etter 'if'-setning i linje 2

    Ved feil forårsaket av skrivefeil i navn på attributter og variabelnavn i en funksjon, sendes det ut en anbefaling med riktig navn. >>>collections.namedtoplo Traceback (siste anrop sist): Fil « ", linje 1, inn AttributeError: modul 'collections' har ingen attributt 'namedtoplo'. Mente du: namedtuple?

  • For feilsøkingsverktøy og profileringsverktøy leveres sporingshendelser med de nøyaktige linjenumrene til utført kode.
  • Lagt til sys.flags.warn_default_encoding-innstillingen for å vise en advarsel om potensielle feil assosiert med TextIOWrapper og open()-behandling av UTF-8-kodede filer uten eksplisitt å spesifisere alternativet 'encoding=»utf-8″' (ASCII-koding brukes som standard) . Den nye utgivelsen gir også muligheten til å spesifisere en 'encoding="locale"'-verdi for å angi kodingen basert på gjeldende lokalitet.
  • En ny operatør er lagt til i skrivemodulen, som gir verktøy for å spesifisere typekommentarer, som tillater bruk av syntaksen "X | Y" for å velge en av typene (X-type eller Y-type). def square(tall: int | float) -> int | float: returnummer ** 2 tilsvarer den tidligere støttede konstruksjonen: def square(nummer: Union[int, float]) -> Union[int, float]: returnummer ** 2
  • Concatenate-operatoren og ParamSpec-variabelen er lagt til skrivemodulen, som lar deg sende tilleggsinformasjon for statisk typekontroll når du bruker Callable. Skrivemodulen legger også til spesielle verdier TypeGuard for å kommentere typebeskyttelsesfunksjoner og TypeAlias ​​for å eksplisitt definere et typealias. StrCache: TypeAlias ​​​​= 'Cache[str]' # et typealias
  • Zip()-funksjonen implementerer et valgfritt "strengt" flagg, som, når det er spesifisert, sjekker om argumentene som itereres har samme lengde. >>> 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 (siste anrop sist ): … ValueError: zip() argument 2 er lengre enn argument 1
  • Nye innebygde funksjoner aiter() og anext() er foreslått med implementering av asynkrone analoger til funksjonene iter() og next().
  • Arbeidet til str(), bytes() og bytearray()-konstruktørene ved arbeid med små objekter har blitt akselerert med 30-40%.
  • Reduserte antall importoperasjoner i runpy-modulen. Kommandoen "python3 -m modulnavn" kjører nå i gjennomsnitt 1.4 ganger raskere på grunn av reduksjonen av importerte moduler fra 69 til 51.
  • LOAD_ATTR-instruksjonen bruker en hurtigbuffermekanisme for individuelle opkoder, som gjorde det mulig å øke hastigheten på arbeidet med vanlige attributter med opptil 36 %, og med spor med opptil 44 %.
  • Når du bygger Python med «--enable-optimizations»-alternativet, er «-fno-semantic-interposition»-modusen aktivert, noe som gjør det mulig å øke hastigheten på tolken med opptil 30 % sammenlignet med å bygge med «--enable-shared " alternativet.
  • Hashlib- og ssl-modulene har lagt til støtte for OpenSSL 3.0.0 og sluttet å støtte OpenSSL-versjoner eldre enn 1.1.1.
  • Den gamle parseren er fjernet, som ble erstattet i forrige gren av PEG (Parsing Expression Grammar)-parseren. Formateringsmodulen er fjernet. Sløyfeparameteren er fjernet fra asyncio API. Metoder som tidligere ble avviklet er fjernet. Py_UNICODE_str*-funksjonene som manipulerer Py_UNICODE*-strenger er fjernet.
  • Distutils-modulen er avviklet og er planlagt for fjerning i Python 3.12. I stedet for distutiler, anbefales det å bruke oppsettverktøyene, emballasjen, plattformen, shutilen, underprosessen og sysconfig-modulene. Wstr-strukturen i PyUnicodeObject har blitt avviklet og planlagt for fjerning.

Kilde: opennet.ru

Legg til en kommentar