Utgivning av programmeringsspråket Python 3.10

Efter ett års utveckling presenteras den betydande utgåvan av programmeringsspråket Python 3.10. Den nya grenen kommer att stödjas i ett och ett halvt år, varefter under ytterligare tre och ett halvt år kommer korrigeringar att genereras för att eliminera sårbarheter.

Samtidigt påbörjades alfatestning av Python 3.11-grenen (i enlighet med det nya utvecklingsschemat börjar arbetet med en ny gren fem månader före utgivningen av den föregående grenen och når alfateststadiet vid tidpunkten för nästa utgåva ). Python 3.11-grenen kommer att vara i alpha-release i sju månader, under vilken nya funktioner kommer att läggas till och buggar fixas. Efter detta kommer betaversioner att testas i tre månader, under vilka det är förbjudet att lägga till nya funktioner och all uppmärksamhet kommer att ägnas åt att fixa buggar. Under de sista två månaderna före releasen kommer filialen att vara i releasekandidatstadiet, då slutlig stabilisering kommer att utföras.

Nya tillägg till Python 3.10 inkluderar:

  • Implementerade "match" och "case"-operatorer för mönstermatchning, som förbättrar kodläsbarheten, förenklar matchning av godtyckliga Python-objekt och ökar kodtillförlitligheten genom avancerad statisk typkontroll. Implementeringen är ungefär som "match"-operatorn som tillhandahålls i Scala, Rust och F#, som jämför resultatet av ett specificerat uttryck med en lista med mönster listade i block baserat på "case"-operatorn.

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

    Du kan packa upp objekt, tupler, listor och godtyckliga sekvenser för att binda variabler baserat på befintliga värden. Det är tillåtet att definiera kapslade mallar, använda ytterligare "om"-villkor i mallen, använda masker ("[x, y, *rest]"), nyckel-/värde-mappningar (till exempel {"bandwidth": b, "latency" ”: l} för att extrahera "bandbredd" och "latens" värden från en ordbok), extrahera submallar (":=" operator), använd namngivna konstanter i en mall. I klasser är det möjligt att anpassa matchningsbeteendet med metoden "__match__()".

    från dataklasser importera dataklass @dataklass klass Punkt: x: int y: int def whereis(punkt): matchningspunkt: fall Point(0, 0): print("Ursprung") fall Point(0, y): print(f" Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Somewhere else") case _: print("Inte en punkt") matchar punkt: fall Punkt(x, y) om x == y: print(f"Y=X vid {x}") fall Punkt(x, y): print(f"Inte på diagonalen") RÖD, GRÖN, BLÅ = 0, 1, 2 matchar färg: fodral RÖD: print(”Jag ser rött!”) case GREEN: print(”Gräs är grönt”) case BLUE: print(”Jag känner blått :(“)

  • Det är nu möjligt att använda parenteser i with-satsen för att dela definitionen av en samling kontexthanterare över flera rader. Det är också tillåtet att lämna ett kommatecken efter den sista kontexthanteraren i gruppen: med ( CtxManager1() som exempel1, CtxManager2() som exempel2, CtxManager3() som exempel3, ): ...
  • Förbättrad rapportering av kodplatsen för fel relaterade till oslutna klammerparenteser och citattecken i bokstavssträngar. Till exempel, när det finns en osluten klammerparentes, istället för att rapportera ett syntaxfel i följande konstruktion, markerar pekaren nu den öppna klammerparentesen och indikerar att det inte finns något avslutande block. Fil "example.py", rad 1 förväntad = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' var aldrig stängd

    Tillagda ytterligare specialiserade syntaxfelmeddelanden: saknas ":"-symbol före ett block och i ordböcker, inte separerar en tuppel med parentes, saknar ett kommatecken i listor, specificerar ett "försök"-block utan "utom" och "slutligen", med "= " istället för "= =" i jämförelser, anger *-uttryck i f-strängar. Dessutom säkerställer det att hela det problematiska uttrycket markeras, inte bara början, och mer explicit information om sammanhanget för fel som är förknippade med felaktig indrag. >>> def foo(): ... if lel: ... x = 2 Fil " ", rad 3 x = 2 ^ IndentationError: förväntade sig ett indraget block efter 'if'-satsen i rad 2

    Vid fel orsakade av stavfel i namnen på attribut och variabelnamn i en funktion, matas en rekommendation med rätt namn ut. >>>collections.namedtoplo Spårning (senaste samtalet senast): Fil « ", rad 1, in AttributeError: modulen 'collections' har inget attribut 'namedtoplo'. Menade du: namedtuple?

  • För felsökningsverktyg och profiler tillhandahålls spårningshändelser med exakt radnummer för exekverad kod.
  • Lade till inställningen sys.flags.warn_default_encoding för att visa en varning om potentiella fel associerade med TextIOWrapper och open() bearbetning av UTF-8-kodade filer utan att uttryckligen ange alternativet 'encoding=»utf-8″' (ASCII-kodning används som standard) . Den nya versionen ger också möjlighet att ange ett 'encoding="locale"'-värde för att ställa in kodningen baserat på den aktuella lokalen.
  • En ny operatör har lagts till i skrivmodulen, som tillhandahåller verktyg för att specificera typkommentarer, vilket tillåter användning av syntaxen "X | Y" för att välja en av typerna (X-typ eller Y-typ). def square(nummer: int | float) -> int | float: returnummer ** 2 motsvarar den tidigare stödda konstruktionen: def square(nummer: Union[int, float]) -> Union[int, float]: returnummer ** 2
  • Concatenate-operatorn och ParamSpec-variabeln har lagts till i skrivmodulen, vilket gör att du kan skicka ytterligare information för statisk typkontroll när du använder Callable. Skrivmodulen lägger också till speciella värden TypeGuard för att kommentera typskyddsfunktioner och TypeAlias ​​för att explicit definiera ett typalias. StrCache: TypeAlias ​​​​= 'Cache[str]' # ett typalias
  • Zip()-funktionen implementerar en valfri "strikt" flagga, som, när den anges, kontrollerar om argumenten som itereras är lika långa. >>> 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)) Spårning (senaste anropet senast ): … ValueError: zip() argument 2 är längre än argument 1
  • Nya inbyggda funktioner aiter() och anext() föreslås med implementering av asynkrona analoger till funktionerna iter() och next().
  • Arbetet för konstruktörerna str(), bytes() och bytearray() när man arbetar med små objekt har accelererats med 30-40%.
  • Minskade antalet importoperationer i runpy-modulen. Kommandot "python3 -m modulnamn" går nu i genomsnitt 1.4 gånger snabbare på grund av minskningen av importerade moduler från 69 till 51.
  • LOAD_ATTR-instruktionen använder en cachningsmekanism för individuella opkoder, vilket gjorde det möjligt att påskynda arbetet med vanliga attribut med upp till 36 % och med slots med upp till 44 %.
  • När du bygger Python med alternativet "--enable-optimizations" är läget "-fno-semantic-interposition" nu aktiverat, vilket gör det möjligt att snabba upp tolken med upp till 30 % jämfört med att bygga med "--enable-shared " alternativet.
  • Modulerna hashlib och ssl har lagt till stöd för OpenSSL 3.0.0 och slutat stödja OpenSSL-versioner äldre än 1.1.1.
  • Den gamla parsern har tagits bort, som ersattes i den tidigare grenen av PEG-parsern (Parsing Expression Grammar). Formateringsmodulen har tagits bort. Loopparametern har tagits bort från asyncio API. Metoder som tidigare har föråldrats har tagits bort. Py_UNICODE_str*-funktionerna som manipulerar Py_UNICODE*-strängar har tagits bort.
  • Distutils-modulen har fasats ut och är planerad att tas bort i Python 3.12. Istället för distutiler rekommenderas det att använda installationsverktygen, paketeringen, plattformen, shutilen, subprocessen och sysconfig-modulerna. Wstr-strukturen i PyUnicodeObject har fasats ut och schemalagts för borttagning.

Källa: opennet.ru

Lägg en kommentar