Die Veröffentlichung der Programmiersprache Python 3.10

Nach einem Jahr der Entwicklung wurde eine bedeutende Version der Programmiersprache Python 3.10 veröffentlicht. Dieser neue Branch wird eineinhalb Jahre lang unterstĂŒtzt, gefolgt von weiteren dreieinhalb Jahren, in denen Sicherheitskorrekturen bereitgestellt werden.

Gleichzeitig begann die Alpha-Tests fĂŒr den Branch Python 3.11 (gemĂ€ĂŸ dem neuen Entwicklungszeitplan beginnt die Arbeit an einem neuen Branch fĂŒnf Monate vor der Veröffentlichung des vorherigen Branches und erreicht zum Zeitpunkt der nĂ€chsten Veröffentlichung die Alpha-Testphase). Der Branch Python 3.11 wird wĂ€hrend sieben Monaten in der Alpha-Version sein, in denen neue Funktionen hinzugefĂŒgt und Fehler behoben werden. Danach wird es ĂŒber drei Monate Beta-Tests geben, wĂ€hrend denen das HinzufĂŒgen neuer Funktionen untersagt ist und der Fokus auf der Fehlerbehebung liegt. Die letzten zwei Monate vor der Veröffentlichung wird der Branch in der Release-Kandidaten-Phase sein, in der die endgĂŒltige Stabilisierung durchgefĂŒhrt wird.

Zu den Neuerungen in Python 3.10 gehören:

  • Die Operatoren „match“ und „case“ wurden implementiert, um Mustervergleiche zu ermöglichen. Diese verbessern die Lesbarkeit des Codes, erleichtern das Matching beliebiger Python-Objekte und erhöhen die ZuverlĂ€ssigkeit des Codes durch erweiterte statische TypprĂŒfung. Die Implementierung erinnert stark an den „match“-Operator, der in den Sprachen Scala, Rust und F# zur VerfĂŒgung steht. Dieser vergleicht das Ergebnis des angegebenen Ausdrucks mit einer Liste von Mustern, die in den Klammern des „case“-Operators aufgelistet sind.

    def http_error(status): match status: case 400: return «Bad request» case 401|403|404: return «Not allowed» case 418: return «I’m a teapot» case _: return «Something else»

    Es ist möglich, Objekte, Tupel, Listen und beliebige Sequenzen zu entpacken, um Variablen basierend auf vorhandenen Werten zu binden. Die Definition von geschachtelten Mustern, die Verwendung zusĂ€tzlicher "if"-Bedingungen im Pattern Matching, die Anwendung von Masken ("[x, y, *rest]"), die Zuordnung von SchlĂŒssel-Wert-Paaren (zum Beispiel {"bandwidth": b, "latency": l} zur Extraktion der Werte "bandwidth" und "latency" aus einem Dictionary), die Extraktion von Untermustern (Operator ":=") sowie die Verwendung benannter Konstanten im Muster sind zulĂ€ssig. In Klassen kann das Verhalten beim Matching mit der Methode "__match__()" angepasst werden.

    from dataclasses import dataclass @dataclass class Point: x: int y: int def whereis(point): match point: case Point(0, 0): print("Ursprung") case Point(0, y): print(f"Y={y}") case Point(x, 0): print(f"X={x}") case Point(): print("Irgendwo anders") case _: print("Kein Punkt") match point: case Point(x, y) if x == y: print(f"Y=X bei {x}") case Point(x, y): print(f"Nicht auf der Diagonale") RED, GREEN, BLUE = 0, 1, 2 match color: case RED: print("Ich sehe rot!") case GREEN: print("Das Gras ist grĂŒn") case BLUE: print("Ich fĂŒhle mich blau :( ")

  • Es wurde die Möglichkeit eingefĂŒhrt, runde Klammern im `with`-Operator zu verwenden, um die Definition einer Sammlung von Kontextmanagern ĂŒber mehrere Zeilen zu verteilen. Es ist auch erlaubt, ein Komma nach dem letzten Kontextmanager in der Gruppe zu belassen: with ( CtxManager1() as example1, CtxManager2() as example2, CtxManager3() as example3, ): 

  • Die Informationen ĂŒber den Standort im Code wurden verbessert, insbesondere bei Fehlern, die mit nicht geschlossenen geschweiften Klammern und AnfĂŒhrungszeichen in Stringliteralen verbunden sind. Zum Beispiel, wenn eine geschweifte Klammer nicht geschlossen wird, wird anstelle einer Syntaxfehlerwarnung fĂŒr die folgende Konstruktion nun die öffnende geschweifte Klammer hervorgehoben, und es wird auf den fehlenden schließenden Block hingewiesen. Datei „example.py“, Zeile 1 erwartet = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4, ^ SyntaxError: ‘{‘ wurde nie geschlossen

    ZusĂ€tzliche spezialisierte Fehlermeldungen wurden hinzugefĂŒgt: fehlendes Zeichen „:“ vor Blöcken und in Dictionaries, fehlende Klammern bei Tupeln, fehlendes Komma in Listen, Angabe eines „try“-Blocks ohne „except“ und „finally“, Verwendung von „=“ anstelle von „==“ in Vergleichen sowie die Angabe von *-AusdrĂŒcken in f-Strings. DarĂŒber hinaus wird nun der gesamte problematische Ausdruck hervorgehoben, nicht nur der Anfang, und es erfolgt eine klarere Benachrichtigung ĂŒber den Kontext von Fehlern, die mit falscher EinrĂŒckung zusammenhĂ€ngen. >>> def foo(): 
 if lel: 
 x = 2 Datei „“, Zeile 3 x = 2 ^ IndentationError: nach der ‚if‘-Anweisung in Zeile 2 wurde ein eingerĂŒckter Block erwartet.

    Bei Fehlern, die durch Tippfehler in Attributnamen und Variablennamen in der Funktion verursacht werden, wird eine Empfehlung mit dem richtigen Namen ausgegeben. >>> collections.namedtoplo RĂŒckverfolgung (neueste Anruf zuletzt): Datei „“, Zeile 1, in AttributeError: Modul ‚collections‘ hat kein Attribut ‚namedtoplo‘. Meinten Sie: namedtuple?

  • FĂŒr Debugging-Tools und Profiler wird in den Traceback-Ereignissen die genaue Zeilennummer des ausgefĂŒhrten Codes angezeigt.
  • Die Einstellung sys.flags.warn_default_encoding wurde hinzugefĂŒgt, um eine Warnung bezĂŒglich potenzieller Fehler im Zusammenhang mit der Verarbeitung in TextIOWrapper und open() fĂŒr Dateien in UTF-8-Codierung ohne explizite Angabe der Option ‘encoding=»utf-8»‘ auszugeben (standardmĂ€ĂŸig wird ASCII-Codierung verwendet). Außerdem wurde in dieser Version die Möglichkeit hinzugefĂŒgt, den Wert ‘encoding=»locale»‘ anzugeben, um die Codierung basierend auf der aktuellen Locale festzulegen.
  • Im Modul typing, das Mittel zur Angabe von Typannotationen bereitstellt, wurde ein neuer Operator hinzugefĂŒgt, der die Verwendung der Syntax „X | Y“ zur Auswahl eines der Typen (Typ X oder Typ Y) ermöglicht. def square(number: int | float) -> int | float: return number ** 2 ist Ă€quivalent zu der zuvor unterstĂŒtzten Konstruktion: def square(number: Union[int, float]) -> Union[int, float]: return number ** 2
  • Im Modul typing wurden der Operator Concatenate und die Variable ParamSpec hinzugefĂŒgt, die es ermöglichen, zusĂ€tzliche Informationen fĂŒr die statische TypprĂŒfung bei der Verwendung von Callable bereitzustellen. Im Modul typing wurden außerdem spezielle Werte fĂŒr TypeGuard zum Annotieren von TypgeschĂŒtzten Funktionen sowie TypeAlias fĂŒr die explizite Definition von Typaliasen hinzugefĂŒgt. StrCache: TypeAlias = ‘Cache[str]’ # ein Typalias
  • In der Funktion zip() wurde ein optionales Flag „strict“ implementiert, das die ÜberprĂŒfung der gleichen LĂ€nge der ĂŒbergebenen Argumente durchfĂŒhrt. >>> 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 (most recent call last): ... ValueError: zip() argument 2 ist lĂ€nger als argument 1
  • Es wurden neue eingebaute Funktionen aiter() und anext() vorgeschlagen, die asynchrone Entsprechungen der Funktionen iter() und next() implementieren.
  • Die Arbeitsgeschwindigkeit der Konstruktoren str(), bytes() und bytearray() wurde um 30-40% bei der Arbeit mit kleinen Objekten beschleunigt.
  • Die Anzahl der Importoperationen im Modul runpy wurde verringert. Der Befehl „python3 -m modulname“ wird jetzt im Durchschnitt 1,4-mal schneller ausgefĂŒhrt, da die importierten Module von 69 auf 51 reduziert wurden.
  • In der Anweisung LOAD_ATTR wurde ein Caching-Mechanismus fĂŒr einzelne Opcode implementiert, der die Arbeit mit regulĂ€ren Attributen um bis zu 36% und mit Slots um bis zu 44% beschleunigt hat.
  • Beim Bauen von Python mit der Option „—enable-optimizations“ wird jetzt der Modus „-fno-semantic-interposition“ aktiviert, der die Interpreter-Geschwindigkeit im Vergleich zum Bauen mit der Option „—enable-shared“ um bis zu 30% steigert.
  • In den Modulen hashlib und ssl Die UnterstĂŒtzung fĂŒr OpenSSL 3.0.0 wurde hinzugefĂŒgt, wĂ€hrend die UnterstĂŒtzung fĂŒr Versionen von OpenSSL Ă€lter als 1.1.1 eingestellt wurde.
  • Der alte Parser wurde entfernt, ersetzt durch den PEG-Parser (Parsing Expression Grammar), der in der vorherigen Version eingefĂŒhrt wurde. Das Formatter-Modul wurde entfernt. Der Parameter 'loop' wurde aus der API asyncio entfernt. Vorher als veraltet markierte Methoden wurden gelöscht. Funktionen, die mit Py_UNICODE_str* arbeiten, die Py_UNICODE*-Strings manipulieren, wurden entfernt.
  • Das Modul distutils wurde als veraltet erklĂ€rt und ist fĂŒr die Entfernung in Python 3.12 geplant. Statt distutils wird empfohlen, die Module setuptools, packaging, platform, shutil, subprocess und sysconfig zu verwenden. Die wstr-Struktur wurde ebenfalls als veraltet eingestuft und ist fĂŒr die Entfernung in PyUnicodeObject vorgesehen.

Quelle: opennet.ru

Erwerben Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server đŸ”„ Kaufen Sie zuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster