Verëffentlechung vun der Python 3.10 Programmiersprache

No engem Joer vun der Entwécklung gëtt déi bedeitend Verëffentlechung vun der Python 3.10 Programméiersprooch presentéiert. 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.11 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.11 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.10 enthalen:

  • Implementéiert "Match" a "Fall" Bedreiwer fir Muster Matching, déi d'Code Liesbarkeet verbesseren, d'Matchung vun arbiträren Python Objeten vereinfachen an d'Code Zouverlässegkeet duerch fortgeschratt statesch Typprüfung erhéijen. D'Ëmsetzung ass vill wéi de "Match" Bedreiwer, deen a Scala, Rust, a F # geliwwert gëtt, deen d'Resultat vun engem spezifizéierte Ausdrock vergläicht mat enger Lëscht vu Musteren, déi a Blocken opgezielt sinn, baséiert op dem "Fall" Bedreiwer.

    def http_error (Status): Match Status: Fall 400: zréck "Schlecht Ufro" Fall 401|403|404: zréckginn "Net erlaabt" Fall 418: zréckginn "Ech sinn en Teapot" Fall _: zréck "Eppes anescht"

    Dir kënnt Objeten, Tuples, Lëschten an arbiträr Sequenzen auspacken fir Variabelen op Basis vu existente Wäerter ze binden. Et ass erlaabt nestet Templates ze definéieren, zousätzlech "wann" Bedéngungen an der Schabloun ze benotzen, Masken benotzen ("[x, y, *rest]"), Schlëssel-/Wäertmappingen (zum Beispill {"Bandwidth": b, "latency" ”: l} fir "Bandbreedung" an "Latency" Wäerter aus engem Wierderbuch ze extrahieren), Ënnerschabloune extrahieren (":=" Bedreiwer), benotzt genannt Konstanten an enger Schabloun. A Klassen ass et méiglech passende Verhalen mat der Method "__match__ ()" ze personaliséieren.

    aus dataklassen importéieren dataclass @dataclass class 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("Somewhere else") case _: print("Not a point") match Punkt: Fall Punkt (x, y) wann x == y: Drécken (f"Y=X bei {x}") Fall Punkt (x, y): Drécken (f"Net op der Diagonal") ROUT, GRÉNG, BLAU = 0, 1, 2 Match Faarf: Fall RED: print(“Ech gesinn rout!”) case GREEN: print(“Grass is green”) case BLUE: print(“Ech fille de Blues :(“)

  • Et ass elo méiglech Klammeren an der mat Ausso ze benotzen fir d'Definitioun vun enger Sammlung vu Kontextmanager iwwer verschidde Linnen opzedeelen. Et ass och erlaabt e Komma nom leschte Kontextmanager an der Grupp ze loossen: mat ( CtxManager1() als Beispill1, CtxManager2() als Beispill2, CtxManager3() als Beispill3, ): ...
  • Verbesserte Berichterstattung vun der Codeplaz vu Feeler am Zesummenhang mat ongeschlossene Klameren an Zitater a Stringliteralen. Zum Beispill, wann et eng net zougemaach Klammer ass, anstatt e Syntaxfehler am folgende Konstrukt ze mellen, markéiert de Pointer elo d'Ouverture Klammer a weist datt et kee Schlussblock ass. Datei "example.py", Linn 1 erwaart = {9:1, 18:2, 19:2, 27:3, 28:3, 29:3, 36:4, 37:4, ^SyntaxError: '{' war ni zougemaach

    Zousätzlech spezialiséiert Syntaxfehlermeldungen bäigefüügt: fehlt ":" Symbol virun engem Block an an Dictionnairen, trennt net en Tupel mat Klammern, fehlt e Komma an de Lëschten, spezifizéiert e "probéieren" Block ouni "ausser" an "endlech", mat "= " amplaz vun "= =" am Vergläicher, spezifizéieren *-Ausdrock a f-Strings. Ausserdeem garantéiert et datt de ganze problematesche Ausdrock beliicht ass, net nëmmen den Ufank, a méi explizit Informatioun iwwer de Kontext vu Feeler, déi mat falschen Abriecher verbonne sinn. >>> def foo(): … wann lel: … x = 2 Datei "", Linn 3 x = 2 ^ IndentationError: erwaart en agedréckt Block no 'if' Ausso an der Linn 2

    Bei Feeler verursaacht duerch Tippfehler an den Nimm vun Attributer a Variabelennimm an enger Funktioun, gëtt eng Empfehlung mam richtegen Numm erausginn. >>> collections.namedtoplo Traceback (läscht Uruff lescht): Datei "", Linn 1, an AttributeError: Modul 'Collections' huet keen Attribut 'namedtoplo'. Hutt Dir gemengt: genannt Tuple?

  • Fir Debugging-Tools a Profiler, Spuerevenementer gi mat den exakten Zeilnummeren vum ausgefouerten Code geliwwert.
  • Added sys.flags.warn_default_encoding Astellung fir eng Warnung iwwer potenziell Fehler ze weisen, déi mat TextIOWrapper assoziéiert sinn an oppen () Veraarbechtung UTF-8 encodéiert Dateien ouni explizit d'Kodéierung =»utf-8″'Optioun ze spezifizéieren (ASCII Kodéierung gëtt als Standard benotzt). Déi nei Verëffentlechung bitt och d'Fäegkeet fir e 'Encoding="locale"'Wäert ze spezifizéieren fir d'Kodéierung op Basis vun der aktueller Locale ze setzen.
  • En neie Bedreiwer gouf zum Tippmodul bäigefüügt, deen Tools ubitt fir Typannotatiounen ze spezifizéieren, wat d'Benotzung vun der Syntax "X | Y" fir eng vun den Typen ze wielen (X Typ oder Y Typ). def square(nummer: int | float) -> int | float: Retournummer ** 2 ass gläichwäerteg mam virdrun ënnerstëtzte Konstrukt: def square (Nummer: Union[int, float]) -> Union[int, float]: Retournummer ** 2
  • De Concatenate Bedreiwer an d'ParamSpec Variabel goufen zum Tippmodul bäigefüügt, wat Iech erlaabt zousätzlech Informatioune fir statesch Typprüfung ze passéieren wann Dir Callable benotzt. Den Tippmodul füügt och speziell Wäerter TypeGuard fir Typschutzfunktiounen an TypeAlias ​​fir explizit en Typalias ze definéieren. StrCache: TypeAlias ​​​​= 'Cache[str]' # en Typalias
  • D'Zip () Funktioun implementéiert en optionalen "strikt" Fändel, deen, wann spezifizéiert, kontrolléiert ob d'Argumenter, déi iteréiert ginn, déiselwecht Längt sinn. >>> 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 (rezentst Uruff lescht ): … ValueError: zip() Argument 2 ass méi laang wéi Argument 1
  • New gebaut-an Funktiounen aiter () an anext () mat der Ëmsetzung vun asynchronous Analoga zu de Funktiounen iter proposéiert () an nächst ().
  • D'Aarbecht vun de str (), Bytes () an bytearray () Konstruktoren wann Dir mat klengen Objeten schafft ass ëm 30-40% beschleunegt ginn.
  • Reduzéiert d'Zuel vun den Importoperatiounen am Runpy Modul. De Kommando "python3 -m module_name" leeft elo am Duerchschnëtt 1.4 Mol méi séier wéinst der Reduktioun vun importéierte Moduler vu 69 op 51.
  • D'LOAD_ATTR Instruktioun benotzt e Cachingmechanismus fir eenzel Opcoden, wat et méiglech gemaach huet d'Aarbecht mat regelméissegen Attributer bis zu 36% ze beschleunegen, a mat Slots bis zu 44%.
  • Wann Dir Python mat der Optioun "--enable-optimizations" baut, ass de "-fno-semantic-interposition" Modus elo aktivéiert, wat et erlaabt den Dolmetscher bis zu 30% ze beschleunegen am Verglach mam Bau mam "--enable-shared" " Optioun.
  • D'Hashlib an ssl Moduler hunn Ënnerstëtzung fir OpenSSL 3.0.0 bäigefüügt an opgehalen OpenSSL Versiounen méi al wéi 1.1.1 z'ënnerstëtzen.
  • Den alen Parser gouf geläscht, deen an der viregter Branche duerch de PEG (Parsing Expression Grammar) Parser ersat gouf. De Formatermodul gouf geläscht. De Loop-Parameter gouf aus der asyncio API geläscht. Methoden déi virdru ofgeschaaft goufen, goufen ewechgeholl. D'Py_UNICODE_str* Funktiounen déi Py_UNICODE* Strings manipuléieren goufen ewechgeholl.
  • Den distutils Modul gouf ofgeschaaft an ass geplangt fir am Python 3.12 ze läschen. Amplaz vun Distutilen ass et recommandéiert d'Setuptools, d'Verpakung, d'Plattform, d'Shutil, d'Subprocess a Sysconfig Moduler ze benotzen. D'wstr Struktur am PyUnicodeObject gouf ofgeschaaft a geplangt fir d'Entfernung.

Source: opennet.ru

Setzt e Commentaire