Veröffentlichung der Programmiersprache Python 3.8

Nach anderthalb Jahren Entwicklungszeit eingereicht Hauptversion der Programmiersprache Python 3.8. Korrekturaktualisierungen für den Python 3.8-Zweig ist geplant Veröffentlichung innerhalb von 18 Monaten. Kritische Schwachstellen werden 5 Jahre lang bis Oktober 2024 behoben. Korrekturupdates für den 3.8-Zweig werden alle zwei Monate veröffentlicht, wobei die erste Korrekturversion von Python 3.8.1 für Dezember geplant ist.

Unter den hinzugefügten Innovationen:

  • Unterstützen Zuweisungsoperationen innerhalb komplexer Ausdrücke. Mit dem neuen „:=“-Operator ist es möglich, Wertzuweisungsoperationen innerhalb anderer Ausdrücke durchzuführen, um beispielsweise doppelte Funktionsaufrufe in bedingten Anweisungen und bei der Definition von Schleifen zu vermeiden:

    wenn (n := len(a)) > 10:
    ...

    while (block := f.read(256)) != ":
    ...

  • Unterstützen Neue Syntax zur Angabe von Funktionsargumenten. Beim Aufzählen von Argumenten während einer Funktionsdefinition können Sie jetzt ein „/“ angeben, um Argumente, denen nur Werte zugewiesen werden können, basierend auf der Reihenfolge, in der die Werte während des Funktionsaufrufs aufgezählt werden, von Argumenten zu trennen, die zugewiesen werden können in beliebiger Reihenfolge (Variable=Wert-Syntax) ). Auf der praktischen Seite ermöglicht die neue Funktion Funktionen in Python, das Verhalten vorhandener Funktionen in C vollständig zu emulieren und außerdem die Bindung an bestimmte Namen zu vermeiden, beispielsweise wenn der Parametername in Zukunft geändert werden soll.

    Das „/“-Flag ergänzt das zuvor hinzugefügte „*“-Flag und trennt Variablen, für die nur eine Zuweisung in der Form „Variable=Wert“ anwendbar ist. Beispielsweise können in der Funktion „def f(a, b, /, c, d, *, e, f):“ die Variablen „a“ und „b“ nur in der Reihenfolge zugewiesen werden, in der die Werte aufgeführt sind ,
    Variablen „e“ und „f“ nur durch die Zuweisung „Variable=Wert“ und Variablen „c“ und „d“ auf eine der folgenden Arten:

    f(10, 20, 30, 40, e=50, f=60)
    f(10, 20, s=30, d=40, e=50, f=60)

  • Добавлен neue C-API
    um Python-Initialisierungsparameter zu konfigurieren und so die vollständige Kontrolle über alles zu ermöglichen Aufbau und Bereitstellung erweiterter Fehlerbehandlungsfunktionen. Die vorgeschlagene API erleichtert die Einbettung der Python-Interpreter-Funktionalität in andere C-Anwendungen.

  • Umgesetzt neues Vectorcall-Protokoll für schnelleren Zugriff auf in C-Sprache geschriebene Objekte. In CPython 3.8 ist der Zugriff auf Vectorcall noch auf die interne Nutzung beschränkt, in CPython 3.9 ist eine Überführung in die Kategorie der öffentlich zugänglichen APIs geplant;
  • Hinzugefügt Aufrufe von Runtime Audit Hooks, die Anwendungen und Frameworks in Python Zugriff auf Low-Level-Informationen über den Fortschritt des Skripts bieten, um die durchgeführten Aktionen zu überwachen (Sie können beispielsweise den Import von Modulen, das Öffnen von Dateien mithilfe einer Ablaufverfolgung verfolgen). Zugriff auf Netzwerk-Sockets, Ausführen von Code über exec, eval und run_mod);
  • Im Modul beizen zur Verfügung gestellt Unterstützung für das Pickle 5-Protokoll, das zum Serialisieren und Deserialisieren von Objekten verwendet wird. Mit Pickle können Sie die Übertragung großer Datenmengen zwischen Python-Prozessen in Multi-Core- und Multi-Node-Konfigurationen optimieren, indem Sie die Anzahl der Speicherkopiervorgänge reduzieren und zusätzliche Optimierungstechniken wie die Verwendung datenspezifischer Komprimierungsalgorithmen anwenden. Die fünfte Version des Protokolls zeichnet sich durch die Hinzufügung eines Out-of-Band-Übertragungsmodus aus, bei dem Daten getrennt vom Haupt-Pickle-Stream übertragen werden können.
  • Standardmäßig ist die vierte Version des Pickle-Protokolls aktiviert, die im Vergleich zur zuvor standardmäßig angebotenen dritten Version eine höhere Leistung und eine Reduzierung der Größe der übertragenen Daten ermöglicht;
  • Im Modul Eingabe Es werden mehrere neue Funktionen eingeführt:
    • Klasse TypedDict für assoziative Arrays, in denen Typinformationen explizit für die mit den Schlüsseln verknüpften Daten angegeben werden („TypedDict('Point2D', x=int, y=int, label=str)“).
    • Typ Wörtlich, wodurch Sie einen Parameter oder Rückgabewert auf einige vordefinierte Werte („Literal['connected', 'disconnected']“) beschränken können.
    • Konstruktion "Ende", was es ermöglicht, die Werte von Variablen, Funktionen, Methoden und Klassen zu definieren, die nicht geändert oder neu zugewiesen werden können ("pi: Final[float] = 3.1415926536").
  • Es wurde die Möglichkeit hinzugefügt, einen Cache für kompilierte Dateien mit Bytecode zuzuweisen, die in einem separaten FS-Baum gespeichert und durch den Code von den Verzeichnissen getrennt werden. Der Pfad zum Speichern von Dateien mit Bytecode wird über eine Variable festgelegt PYTHONPYCACHEPREFIX oder die Option „-X pycache_prefix“;
  • Umgesetzt die Möglichkeit, Debug-Builds von Python zu erstellen, die ein mit der Version identisches ABI verwenden, wodurch Sie in SI-Sprache geschriebene und für stabile Releases kompilierte Erweiterungen in Debug-Builds laden können;
  • F-Strings (formatierte Literale mit dem Präfix „f“) bieten Unterstützung für den =-Operator (z. B. „f‘{expr=}‘“), der es Ihnen ermöglicht, einen Ausdruck zur einfacheren Fehlersuche in Text umzuwandeln. Zum Beispiel:

    ››› user = 'eric_idle'
    ››› member_since = date(1975, 7, 31)
    ››› f'{user=} {member_since=}'
    „user='eric_idle' member_since=datetime.date(1975, 7, 31)“

  • Ausdruck "fortsetzen» Darf innerhalb eines Blocks verwendet werden endlich;
  • Neues Modul hinzugefügt multiprocessing.shared_memory, was die Verwendung gemeinsam genutzter Speichersegmente in Multiprozesskonfigurationen ermöglicht;
  • Auf der Windows-Plattform wurde die Asyncio-Implementierung verschoben, um die Klasse zu verwenden ProactorEventLoop;
  • Die Leistung der LOAD_GLOBAL-Anweisung wurde durch die Verwendung eines neuen Objektcode-Caching-Mechanismus um etwa 40 % gesteigert.

Source: opennet.ru

Kommentar hinzufügen