Verëffentlechung vun der Python 3.11 Programmiersprache

No engem Joer vun der Entwécklung ass déi bedeitend Verëffentlechung vun der Python 3.11 Programméiersprooch publizéiert ginn. Déi nei Branche gëtt fir een an en halleft Joer ënnerstëtzt, duerno fir weider dräi an en halleft Joer Fixe generéiert ginn fir et fir Schwachstelle ze eliminéieren.

Zur selwechter Zäit huet d'Alpha-Test vun der Python 3.12 Branche ugefaang (am neien Entwécklungsplang, d'Aarbecht un enger neier Branche fänkt fënnef Méint virun der Verëffentlechung vun der fréierer Branche un an erreecht d'Alpha-Teststadium bis zur nächster Verëffentlechung ). De Python 3.12 Branche wäert an der Alpha Verëffentlechung fir siwe Méint sinn, während deenen nei Features bäigefüügt ginn a Bugs fixéiert ginn. Duerno ginn d'Beta-Versioune fir dräi Méint getest, während deenen nei Fonctiounen bäizefügen ass verbueden an all Opmierksamkeet gëtt fir Bugs ze fixéieren. Fir déi lescht zwee Méint virun der Verëffentlechung wäert d'Branche an der Verëffentlechungskandidatstadium sinn, wou d'final Stabiliséierung duerchgefouert gëtt.

Nei Ergänzunge fir Python 3.11 enthalen:

  • Wichteg Aarbecht gouf gemaach fir d'Performance ze optimiséieren. Déi nei Branche enthält Ännerungen am Zesummenhang mat Beschleunegung an Inline Deployment vu Funktiounsruffen, d'Benotzung vu schnelle Dolmetscher vu Standardoperatiounen (x+x, x*x, xx, a[i], a[i] = z, f(arg) C(arg), o.method(), o.attr = z, *seq), souwéi Optimisatiounen, déi vun de Cinder an HotPy Projete virbereet sinn. Ofhängeg vun der Aart vun der Belaaschtung gëtt et eng Erhéijung vun der Code Ausféierungsgeschwindegkeet vun 10-60%. Am Duerchschnëtt ass d'Performance op der Pyperformance Test Suite ëm 25% eropgaang.

    De Bytecode Caching Mechanismus gouf nei designt, wat d'Interpreter Startup Zäit ëm 10-15% reduzéiert huet. Objekter mat Code a Bytecode ginn elo statesch vum Dolmetscher zougewisen, wat et méiglech gemaach huet d'Etappen vun der Unmarshalling Bytecode aus dem Cache extrahéiert ze eliminéieren an Objete mat Code ze konvertéieren fir an dynamesch Erënnerung ze setzen.

  • Wann Dir Uruffspuren an diagnostesche Messagen weist, ass et elo méiglech Informatiounen iwwer den Ausdrock ze weisen, deen de Feeler verursaacht huet (virdrun war nëmmen d'Linn markéiert ouni Detailer wéi en Deel vun der Linn de Feeler verursaacht huet). Verlängert Spuerinformatioun kann och duerch d'API kritt ginn a benotzt fir eenzel Bytecode-Uweisungen op eng spezifesch Positioun am Quellcode mat der codeobject.co_positions () Method oder der C API Funktioun PyCode_Addr2Location (). D'Ännerung mécht et vill méi einfach fir Probleemer mat nestéierten Wierderbuchobjekter, Multiple Funktiounsruffen a komplexe arithmeteschen Ausdréck ze debuggen. Traceback (läscht Uruff lescht): Datei "calculation.py", Linn 54, am Resultat = (x / y / z) * (a / b / c) ~~~~~~^~~ ZeroDivisionError: Divisioun no Null
  • Zousätzlech Ënnerstëtzung fir Ausnamegruppen, déi dem Programm d'Fäegkeet ginn fir verschidde verschidden Ausnahmen gläichzäiteg ze generéieren an ze veraarbecht. Fir verschidde Ausnahmen ze gruppéieren an zesummen z'erhéijen, goufen nei Ausnahmstypen ExceptionGroup a BaseExceptionGroup proposéiert, an den Ausdrock "ausser*" gouf derbäigesat fir eenzel Ausnahmen aus enger Grupp ze markéieren.
  • D'add_note () Method ass an der BaseException Klass dobäi ginn, erlaabt Iech eng Text Notiz zu der Ausnam ze befestegt, Zum Beispill, Kontext Informatiounen dobäi déi net disponibel ass, wann d'Ausnam geworf ass.
  • Eng speziell Selbsttyp bäigefüügt fir déi aktuell Privatklass ze representéieren. Selbst ka benotzt ginn fir Methoden ze annotéieren déi eng Instanz vu senger Klass op eng méi einfach Manéier zréckginn wéi TypeVar ze benotzen. class MyLock: def __enter__(self) -> Self: self.lock() return self
  • E spezielle LiteralString-Typ bäigefüügt, deen nëmmen String-Literaler enthalen kann, déi mat der LiteralString-Typ kompatibel sinn (dh Bare a LiteralString Strings, awer net arbiträr oder kombinéiert Strings). De LiteralString-Typ kann benotzt ginn fir de Passage vu Stringargumenter op Funktiounen ze limitéieren, arbiträr Ersatz vun Deeler vun Strings, an deenen zu Schwachstelle kann féieren, zum Beispill wann Dir Strings fir SQL Ufroen oder Shellbefehle generéiert. def run_query(sql: LiteralString) -> ... ... def caller( arbitrary_string: str, query_string: LiteralString, table_name: LiteralString, ) -> Keen: run_query("SELECT * FROM students") # ok run_query(literal_string) # ok run_query( "SELECT * FROM" + literal_string) # ok run_query(arbitrary_string) # Feeler run_query( # Feeler f"SELECT * VUN Studenten WHERE Numm = {arbitrary_string}")
  • Den TypeVarTuple-Typ gouf bäigefüügt, wat d'Benotzung vu variabelen Generik erlaabt, am Géigesaz zu TypeVar, déi net eng Zort ofdecken, awer eng arbiträr Unzuel vun Typen.
  • D'Standardbibliothéik enthält den tomllib-Modul mat Funktiounen fir den TOML-Format ze analyséieren.
  • Et ass méiglech eenzel Elementer vun getippten Dictionnairen (TypedDict) mat Required an NotRequired Etiketten ze markéieren fir erfuerderlech an optional Felder ze bestëmmen (par défaut sinn all deklaréiert Felder erfuerderlech wann den Totalparameter net op False gesat ass). class Movie(TypedDict): title: str year: NotRequired[int] m1: Movie = {"title": "Black Panther", "year": 2018} # OK m2: Movie = {"title": "Star Wars" } # OK (d'Joerfeld ass fakultativ) m3: Film = {"Joer": 2022} # Feeler, dat erfuerderlecht Titelfeld ass net ausgefëllt)
  • D'TaskGroup Klass gouf an den Asyncio Modul bäigefüügt mat der Ëmsetzung vun engem asynchrone Kontextmanager deen op eng Grupp vun Aufgaben waart fir ze kompletéieren. Aufgaben an eng Grupp bäizefügen gëtt mat der Method create_task () gemaach. async def main(): async with asyncio.TaskGroup() as tg: task1 = tg.create_task(some_coro(...)) task2 = tg.create_task(another_coro(...)) print("Béid Aufgaben sinn elo ofgeschloss .")
  • Added @dataclass_transform Decorator fir Klassen, Methoden a Funktiounen, wann spezifizéiert, behandelt de statesche Typ Kontrollsystem den Objet wéi wann de @dataclasses.dataclass Dekorator benotzt. Am Beispill hei ënnen gëtt d'ClientModel Klass, wann Dir Typen iwwerpréift, ähnlech wéi eng Klass mat dem @dataclasses.dataclass Dekorateur veraarbecht, d.h. wéi eng __init__ Method ze hunn, datt ID an Numm Verännerlechen acceptéiert. @dataclass_transform() class ModelBase: ... class CustomerModel(ModelBase): id: int name: str
  • A reguläre Ausdrock ass d'Fäegkeet fir atomar Gruppéierung ((?>...)) a Besëtzer Quantifizéierer (*+, ++, ?+, {m,n}+) ze benotzen bäigefüügt.
  • Derbäigesat "-P" Kommando Linn Optioun an PYTHONSAFEPATH Ëmfeld Variabel fir automatesch Unhang vun potenziell onsécher Fichier Weeër ze sys.path auszeschalten.
  • De py.exe Utility fir d'Windows Plattform ass wesentlech verbessert ginn, andeems d'Syntax "-V:" ënnerstëtzt. / " zousätzlech zu "- . "
  • Vill Makroen an der C API ginn a regelméisseg oder statesch Inline Funktiounen ëmgewandelt.
  • D'uu, cgi, pipes, crypt, aifc, chunk, msilib, telnetlib, audioop, nis, sndhdr, imghdr, nntplib, spwd, xdrlib, cgitb, mailcap, ossaudiodev, a sunau Moduler goufen ofgeschaaft a ginn am Python geläscht. 3.13 Fräisetzung. Geläscht PyUnicode_Encode * Funktiounen.

Source: opennet.ru

Setzt e Commentaire