Udgivelse af programmeringssproget Python 3.10

Efter et års udvikling præsenteres den betydelige udgivelse af programmeringssproget Python 3.10. Den nye filial vil blive understøttet i halvandet år, hvorefter der i yderligere tre et halvt år vil blive genereret rettelser til den for at eliminere sårbarheder.

Samtidig begyndte alfatest af Python 3.11-grenen (i overensstemmelse med den nye udviklingsplan begynder arbejdet med en ny filial fem måneder før udgivelsen af ​​den forrige filial og når alfateststadiet på tidspunktet for den næste udgivelse ). Python 3.11-grenen vil være i alfa-udgivelse i syv måneder, hvor nye funktioner vil blive tilføjet og fejl rettet. Herefter vil betaversioner blive testet i tre måneder, hvor det er forbudt at tilføje nye funktioner, og al opmærksomhed vil blive rettet mod at rette fejl. I de sidste to måneder før udgivelsen vil filialen være på udgivelseskandidatstadiet, hvor den endelige stabilisering vil blive udført.

Nye tilføjelser til Python 3.10 inkluderer:

  • Implementerede "match" og "case"-operatorer til mønstermatchning, som forbedrer kodelæsbarheden, forenkler matchning af vilkårlige Python-objekter og øger kodepålidelighed gennem avanceret statisk typekontrol. Implementeringen ligner meget "match" operatoren i Scala, Rust og F#, som sammenligner resultatet af et specificeret udtryk med en liste over mønstre opført i blokke baseret 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”

    Du kan pakke objekter, tupler, lister og vilkårlige sekvenser ud for at binde variabler baseret på eksisterende værdier. Det er tilladt at definere indlejrede skabeloner, bruge yderligere "hvis"-betingelser i skabelonen, bruge masker ("[x, y, *rest]"), nøgle-/værditilknytninger (f.eks. {"båndbredde": b, "latency" ”: l} for at udtrække "båndbredde" og "latency" værdier fra en ordbog), udtræk underskabeloner (":=" operator), brug navngivne konstanter i en skabelon. I klasser er det muligt at tilpasse matchningsadfærd ved hjælp af "__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}") case Point(x, 0): print(f"X={x}") case Point(): print("Et andet sted") case _: print("Ikke et punkt") match punkt: case Punkt(x, y) hvis x == y: print(f"Y=X ved {x}") case Punkt(x, y): print(f"Ikke på diagonalen") RØD, GRØN, BLÅ = 0, 1, 2 match farve: kasse RØD: print(“Jeg ser rød!”) kasse GRØN: print(“Græs er grøn”) kasse BLÅ: print(“Jeg føler det blå :(“)

  • Det er nu muligt at bruge parenteser i with-sætningen til at opdele definitionen af ​​en samling af kontekstadministratorer på tværs af flere linjer. Det er også tilladt at efterlade et komma efter den sidste kontekstadministrator i gruppen: med ( CtxManager1() som eksempel1, CtxManager2() som eksempel2, CtxManager3() som eksempel3, ): ...
  • Forbedret rapportering af kodeplaceringen af ​​fejl relateret til ulukkede klammeparenteser og anførselstegn i strenge bogstaver. For eksempel, når der er en ulukket klammeparentes, i stedet for at rapportere en syntaksfejl i den følgende konstruktion, fremhæver markøren nu den åbne klammeparentes og indikerer, at der ikke er nogen lukkeblok. Fil "example.py", linje 1 forventet = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' blev aldrig lukket

    Tilføjet yderligere specialiserede syntaksfejlmeddelelser: mangler ":"-symbol før en blok og i ordbøger, adskiller ikke en tupel med parenteser, mangler et komma i lister, specificerer en "prøv"-blok uden "undtagen" og "endelig", ved hjælp af "= " i stedet for "= =" i sammenligninger, der angiver *-udtryk i f-strenge. Derudover sikrer det, at hele det problematiske udtryk fremhæves, ikke kun begyndelsen, og mere eksplicit information om konteksten af ​​fejl forbundet med forkert indrykning. >>> def foo(): ... if lel: ... x = 2 Fil " ", linje 3 x = 2 ^ Indentationsfejl: forventede en indrykket blok efter 'if'-sætning i linje 2

    Ved fejl forårsaget af tastefejl i navnene på attributter og variabelnavne i en funktion, udlæses en anbefaling med det korrekte navn. >>>collections.namedtoplo Traceback (seneste opkald sidst): Fil « ", linje 1, in AttributeError: modul 'collections' har ingen attribut 'namedtoplo'. Mente du: namedtuple?

  • Til fejlfindingsværktøjer og profileringsværktøjer leveres sporingshændelser med de nøjagtige linjenumre for den udførte kode.
  • Tilføjet sys.flags.warn_default_encoding-indstilling for at vise en advarsel om potentielle fejl forbundet med TextIOWrapper og open()-behandling af UTF-8-kodede filer uden eksplicit at angive indstillingen 'encoding=»utf-8″' (ASCII-kodning bruges som standard). Den nye udgivelse giver også mulighed for at angive en 'encoding="locale"'-værdi for at indstille kodningen baseret på den aktuelle lokalitet.
  • En ny operator er blevet tilføjet til indtastningsmodulet, som giver værktøjer til at specificere typeannoteringer, hvilket tillader brugen af ​​syntaksen "X | Y" for at vælge en af ​​typerne (X-type eller Y-type). def square(tal: int | float) -> int | float: returtal ** 2 svarer til den tidligere understøttede konstruktion: def square(tal: Union[int, float]) -> Union[int, float]: returnummer ** 2
  • Concatenate-operatoren og ParamSpec-variablen er blevet tilføjet til indtastningsmodulet, som giver dig mulighed for at videregive yderligere information til statisk typekontrol, når du bruger Callable. Indtastningsmodulet tilføjer også specielle værdier TypeGuard for at annotere typebeskyttelsesfunktioner og TypeAlias ​​for eksplicit at definere et typealias. StrCache: TypeAlias ​​​​= 'Cache[str]' # et typealias
  • Zip()-funktionen implementerer et valgfrit "strengt" flag, som, når det er angivet, kontrollerer, om de argumenter, der gentages, har samme længde. >>> 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 (seneste opkald sidst ): … ValueError: zip() argument 2 er længere end argument 1
  • Nye indbyggede funktioner aiter() og anext() foreslås med implementering af asynkrone analoger til funktionerne iter() og next().
  • Arbejdet med str(), bytes() og bytearray()-konstruktørerne, når der arbejdes med små objekter, er blevet accelereret med 30-40%.
  • Reducerede antallet af importhandlinger i runpy-modulet. Kommandoen "python3 -m modulnavn" kører nu i gennemsnit 1.4 gange hurtigere på grund af reduktionen af ​​importerede moduler fra 69 til 51.
  • LOAD_ATTR-instruktionen bruger en caching-mekanisme for individuelle opkoder, som gjorde det muligt at fremskynde arbejdet med almindelige attributter med op til 36 % og med slots med op til 44 %.
  • Når du bygger Python med "--enable-optimizations"-indstillingen, er "-fno-semantic-interposition"-tilstanden nu aktiveret, hvilket gør det muligt at fremskynde tolken med op til 30 % sammenlignet med at bygge med "--enable-shared " mulighed.
  • Hashlib- og ssl-modulerne har tilføjet understøttelse af OpenSSL 3.0.0 og holdt op med at understøtte OpenSSL-versioner ældre end 1.1.1.
  • Den gamle parser er blevet fjernet, som blev erstattet i den forrige gren af ​​PEG (Parsing Expression Grammar) parseren. Formateringsmodulet er blevet fjernet. Løkkeparameteren er blevet fjernet fra asyncio API. Metoder, der tidligere var forældet, er blevet fjernet. Py_UNICODE_str*-funktionerne, der manipulerer Py_UNICODE*-strenge, er blevet fjernet.
  • Distutils-modulet er blevet forældet og er planlagt til fjernelse i Python 3.12. I stedet for distutils anbefales det at bruge opsætningsværktøjerne, emballage, platform, shutil, subproces og sysconfig moduler. Wstr-strukturen i PyUnicodeObject er blevet forældet og planlagt til fjernelse.

Kilde: opennet.ru

Tilføj en kommentar