UtgÄvan av programmeringssprÄket Python 3.11

Efter ett Ärs utveckling har en betydande version av programmeringssprÄket Python 3.11 publicerats. Denna gren kommer att stödjas under ett och ett halvt Är, varefter den kommer att fÄ sÀkerhetsfixar i ytterligare tre och ett halvt Är.

Samtidigt har alfatestningen av Python 3.12-grenen pÄbörjats (enligt den nya utvecklingsplanen börjar arbetet med den nya grenen fem mÄnader innan releasen av den föregÄende grenen och nÄr alfatestning vid release). Python 3.12-grenen kommer att befinna sig i alfautgÄvor under sju mÄnader, under vilka nya funktioner kommer att lÀggas till och buggar rÀttas. DÀrefter kommer det att genomföras betatestning under tre mÄnader, dÀr nya funktioner inte fÄr lÀggas till och hela uppmÀrksamheten kommer att riktas mot buggfixar. De sista tvÄ mÄnaderna före releasen kommer grenen att befinna sig i releasekandidatstadiet, dÀr den slutliga stabiliseringen kommer att utföras.

Bland nyheterna som lagts till i Python 3.11 Àr:

  • En betydande insats har gjorts för att optimera prestandan. Den nya grenen innehĂ„ller Ă€ndringar relaterade till accelerering och inline-utbyggnad av funktionsanrop, anvĂ€ndning av snabba interpreter för typoperationer (x+x, x*x, x-x, a[i], a[i] = z, f(arg) C(arg), o.method(), o.attr = z, *seq), samt optimeringar som utvecklats av projekten Cinder och HotPy. Beroende pĂ„ typen av belastning har hastigheten pĂ„ kodkörningen ökat med 10-60%. I genomsnitt ökade prestandan under pyperformance testsviten med 25%.

    Cache-mekanismen för bytekod har reviderats, vilket har möjliggjort en minskning av starttiden för tolken med 10-15%. Objekt med kod och bytekod placeras nu statiskt av tolken, vilket har gjort det möjligt att utesluta stadierna av demarshalling av hÀmtad bytekod och omvandling av objekt med kod för placering i dynamiskt minne.

  • Vid visning av funktionsspĂ„rningar i diagnostiska meddelanden sĂ€kerstĂ€lls att information om uttrycket som orsakade felet visas (tidigare visades bara raden utan detaljering av vilken del av raden som orsakade felet). Utökad information om spĂ„rningen kan ocksĂ„ erhĂ„llas via API och anvĂ€ndas för att matcha individuella bytekodinstruktioner med en specifik position i kĂ€llkoden, med hjĂ€lp av metoden codeobject.co_positions() eller funktionen C API PyCode_Addr2Location(). Ändringen förenklar avsevĂ€rt felsökningen av problem relaterade till nĂ€stlade ordboksobjekt, flera funktionsanrop och komplexa aritmetiska uttryck. Traceback (most recent call last): File «calculation.py», line 54, in result = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: division by zero
  • Stöd för undantagsgrupper har lagts till, vilket ger programmet möjlighet att generera och hantera flera olika undantag samtidigt. För gruppering av flera undantag och deras gemensamma anrop har nya undantagstyper som ExceptionGroup och BaseExceptionGroup introducerats, och för att sĂ€rskilja individuella undantag frĂ„n gruppen har uttrycket «except*» lagts till.
  • I klassen BaseException har metoden add_note() lagts till, vilket gör det möjligt att fĂ€sta en textkommentar till ett undantag, till exempel för att lĂ€gga till kontextuell information som inte var tillgĂ€nglig vid genereringen av undantaget.
  • En sĂ€rskild typ av Self har lagts till, som representerar den aktuella privata klassen. Self kan anvĂ€ndas för att annotera metoder som returnerar en instans av sin klass, pĂ„ ett enklare sĂ€tt Ă€n med anvĂ€ndning av TypeVar. class MyLock: def __enter__(self) -> Self: self.lock() return self
  • En speciell typ av LiteralString har lagts till, som endast kan inkludera strĂ€ngliteraler som Ă€r kompatibla med typen LiteralString (dvs. rena strĂ€ngar och strĂ€ngar av typen LiteralString, men inte godtyckliga eller kombinerade strĂ€ngar av typen str). Typen LiteralString kan anvĂ€ndas för att begrĂ€nsa överföringen av strĂ€ngargument till funktioner, dĂ€r godtycklig insĂ€ttning av strĂ€ngdelar kan leda till sĂ„rbarheter, till exempel vid skapande av strĂ€ngar för SQL-frĂ„gor eller shell-kommandon. def run_query(sql: LiteralString) -> 
 
 def caller( arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> None: run_query(«SELECT * FROM students») # ok run_query(literal_string) # ok run_query(«SELECT * FROM » + literal_string) # ok run_query(arbitrary_string) # Fel run_query( # Fel f»SELECT * FROM students WHERE name = {arbitrary_string}» )
  • Typen TypeVarTuple har lagts till, vilket möjliggör anvĂ€ndning av variabla generiska typer, till skillnad frĂ„n TypeVar, som omfattar inte bara en typ, utan ett godtyckligt antal typer.
  • Modulen tomllib med funktioner för att parsa TOML-formatet har lagts till i standardbiblioteket.
  • Det har blivit möjligt att mĂ€rka individuella element i typade ordböcker (TypedDict) med etiketter som Required och NotRequired för att definiera obligatoriska och icke-obligatoriska fĂ€lt (alla deklarerade fĂ€lt Ă€r som standard obligatoriska att fylla i, om parameter total inte sĂ€tts till False). class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = {«title»: «Black Panther», «year»: 2018} # OK m2: Movie = {«title»: «Star Wars»} # OK (fĂ€ltet year Ă€r valfritt) m3: Movie = {«year»: 2022} # Fel, obligatoriskt fĂ€lt title Ă€r inte fyllt)
  • Klassen TaskGroup har lagts till i modulen asyncio med en implementation av en asynkron kontextförvaltare som vĂ€ntar pĂ„ att en grupp uppgifter ska slutföras. Uppgifter lĂ€ggs till gruppen med metoden create_task(). async def main(): async with asyncio.TaskGroup() as tg: task1 = tg.create_task(some_coro(
)) task2 = tg.create_task(another_coro(
)) print(«BĂ„da uppgifterna har nu slutförts.»)
  • Dekoratorn @dataclass_transform har lagts till för klasser, metoder och funktioner, vilket gör att systemet för statisk typkontroll tolkar objektet som nĂ€r man anvĂ€nder dekoratorn @dataclasses.dataclass. I exemplet nedan hanteras klassen CustomerModel vid typkontroll pĂ„ samma sĂ€tt som en klass med dekoratorn @dataclasses.dataclass, dvs. som om den hade en __init__-metod som tillĂ„ter variablerna id och name. @dataclass_transform() class ModelBase: 
 class CustomerModel(ModelBase): id: int name: str
  • I reguljĂ€ra uttryck har möjligheten att anvĂ€nda atomĂ€r gruppering ((?>
)) och sjĂ€lviska (possessive) kvantifierare (*+, ++, ?+, {m,n}+).
  • En ny kommandoradsalternativ «-P» och miljövariabeln PYTHONSAFEPATH har lagts till för att stĂ€nga av automatisk bifogning av potentiellt osĂ€kra filvĂ€gar till sys.path.
  • Verktyget py.exe för Windows-plattformen har betydligt förbĂ€ttrats, med stöd för syntaktisk notation «-V:/» utöver «-.».
  • MĂ„nga makron i C API har omvandlats 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 deklarerats som förĂ„ldrade och kommer att tas bort i Python 3.13. Funktionerna PyUnicode_Encode* har tagits bort.

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster