Utgivning av programmeringsspråket Python 3.11

Efter ett års utveckling har den betydande utgåvan av programmeringsspråket Python 3.11 publicerats. 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.12-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.12-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.11 inkluderar:

  • Ett betydande arbete har gjorts för att optimera prestandan. Den nya grenen inkluderar förändringar relaterade till acceleration och inline-distribution av funktionsanrop, användning av snabba tolkar av standardoperationer (x+x, x*x, xx, a[i], a[i] = z, f(arg) C( arg), o.method(), o.attr = z, *seq), samt optimeringar förberedda av Cinder- och HotPy-projekten. Beroende på typen av belastning sker en ökning av kodexekveringshastigheten med 10-60%. I genomsnitt ökade prestandan på pyperformance-testsviten med 25 %.

    Mekanismen för bytecode-cache har omdesignats, vilket har minskat tolkens starttid med 10-15 %. Objekt med kod och bytekod allokeras nu statiskt av tolken, vilket gjorde det möjligt att eliminera stadierna av unmarshalling bytecode extraherad från cachen och konvertera objekt med kod för att placeras i dynamiskt minne.

  • Vid visning av samtalsspårningar i diagnostiska meddelanden är det nu möjligt att visa information om uttrycket som orsakade felet (tidigare var endast raden markerad utan att specificera vilken del av raden som orsakade felet). Utökad spårningsinformation kan också erhållas via API:et och användas för att mappa individuella bytekodinstruktioner till en specifik position i källkoden med metoden codeobject.co_positions() eller C API-funktionen PyCode_Addr2Location(). Ändringen gör det mycket lättare att felsöka problem med kapslade ordboksobjekt, flera funktionsanrop och komplexa aritmetiska uttryck. Spårning (senaste samtalet senast): Fil "calculation.py", rad 54, i resultat = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: division med noll
  • Lade till stöd för undantagsgrupper, vilket ger programmet möjlighet att generera och bearbeta flera olika undantag samtidigt. För att gruppera flera undantag och ta upp dem tillsammans har nya undantagstyper ExceptionGroup och BaseExceptionGroup föreslagits, och uttrycket "except*" har lagts till för att markera enskilda undantag från en grupp.
  • Metoden add_note() har lagts till i klassen BaseException, vilket gör att du kan bifoga en textanteckning till undantaget, till exempel lägga till kontextuell information som inte är tillgänglig när undantaget kastas.
  • Lade till en speciell självtyp för att representera den aktuella privata klassen. Self kan användas för att kommentera metoder som returnerar en instans av dess klass på ett enklare sätt än att använda TypeVar. class MyLock: def __enter__(self) -> Self: self.lock() returnerar själv
  • Lade till en speciell LiteralString-typ som bara kan inkludera strängliteraler som är kompatibla med LiteralString-typen (d.v.s. blotta och LiteralString-strängar, men inte godtyckliga eller kombinerade strängsträngar). Typen LiteralString kan användas för att begränsa överföringen av strängargument till funktioner, godtycklig ersättning av delar av strängar som kan leda till sårbarheter, till exempel när strängar genereras för SQL-frågor eller skalkommandon. def run_query(sql: LiteralString) -> ... ... def caller( arbitrary_string: str, query_string: LiteralString, tabellnamn: LiteralString, ) -> Ingen: run_query("SELECT * FROM students") # ok run_query(literal_string) # ok run_query( "SELECT * FROM" + literal_string) # ok run_query(arbitrary_string) # Error run_query( # Error f"SELECT * FROM students WHERE name = {arbitrary_string}" )
  • Typen TypeVarTuple har lagts till, vilket tillåter användning av variabel generika, till skillnad från TypeVar, som inte täcker en typ, utan ett godtyckligt antal typer.
  • Standardbiblioteket innehåller tomllib-modulen med funktioner för att analysera TOML-formatet.
  • Det är möjligt att markera enskilda element i skrivna ordböcker (TypedDict) med etiketter Required och NotRequired för att bestämma obligatoriska och valfria fält (som standard krävs alla deklarerade fält om totalparametern inte är inställd på False). klass Film(TypedDict): title: str year: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars" } # OK (årsfältet är valfritt) m3: Film = {"år": 2022} # Fel, det obligatoriska titelfältet är inte ifyllt)
  • TaskGroup-klassen har lagts till i asyncio-modulen med implementeringen av en asynkron kontexthanterare som väntar på att en grupp uppgifter ska slutföras. Att lägga till uppgifter i en grupp görs med metoden create_task() . async def main(): async with asyncio.TaskGroup() som tg: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task(another_coro(...)) print("Båda uppgifterna har slutförts nu .")
  • Lade till @dataclass_transform-dekorator för klasser, metoder och funktioner, när det anges, behandlar det statiska typkontrollsystemet objektet som om de använder @dataclasses.dataclass-dekoratorn. I exemplet nedan kommer CustomerModel-klassen, vid kontroll av typer, att bearbetas på samma sätt som en klass med @dataclasses.dataclass-dekoratorn, dvs. som att ha en __init__-metod som accepterar id- och namnvariabler. @dataclass_transform() klass ModelBase: … class CustomerModel(ModelBase): id: int namn: str
  • I reguljära uttryck har möjligheten att använda atomgruppering ((?>...)) och possessiva kvantifierare (*+, ++, ?+, {m,n}+) lagts till.
  • Lade till "-P" kommandoradsalternativ och PYTHONSAFEPATH miljövariabel för att inaktivera automatisk bifogning av potentiellt osäkra filsökvägar till sys.path.
  • Verktyget py.exe för Windows-plattformen har förbättrats avsevärt och har lagt till stöd för "-V:"-syntaxen. / " Dessutom "- . "
  • Många makron i C API konverteras till vanliga eller statiska inline-funktioner.
  • Modulerna uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev och sunau har fasats ut och kommer att tas bort i Python 3.13 release. Tog bort PyUnicode_Encode*-funktioner.

Källa: opennet.ru

Lägg en kommentar