Nach anderthalb Jahren Entwicklung bedeutendes Release der Programmiersprache . Korrekturupdates für die Python 3.8 Reihe werden innerhalb von 18 Monaten veröffentlicht. Kritische Sicherheitsanfälligkeiten werden bis Oktober 2024 für 5 Jahre behoben. Korrekturupdates für die 3.8 Reihe werden alle zwei Monate erscheinen, das erste Korrekturrelease Python 3.8.1 ist für Dezember geplant.
Unter den hinzugefügten :
- Zuweisungsoperationen innerhalb komplexer Ausdrücke. Mit dem neuen Operator «:=» ist es möglich, Zuweisungsoperationen innerhalb anderer Ausdrücke auszuführen, um beispielsweise doppelte Funktionsaufrufe in bedingten Anweisungen und bei der Definition von Schleifen zu vermeiden:
if (n := len(a)) > 10:
…while (block := f.read(256)) != »:
… - neuen Syntax zur Argumentzuweisung in Funktionen. Bei der Aufzählung von Argumenten während der Funktionsdefinition kann jetzt ein Marker «/» angegeben werden, der die Argumente trennt, denen Werte nur in der Reihenfolge der Angabe während des Funktionsaufrufs zugewiesen werden können, von den Argumenten, die eine Zuweisung in beliebiger Reihenfolge zulassen (Syntax «variable=Wert»). Aus praktischer Sicht ermöglicht diese neue Funktion, das Verhalten bestehender Funktionen in C in Python-Funktionen vollständig zu emulieren und Bindungen an spezifische Namen zu vermeiden, zum Beispiel falls der Name eines Parameters in Zukunft geändert werden soll.
Das Flag «/» ergänzt die zuvor hinzugefügte Kennzeichnung «*», die Variablen trennt, für die nur Zuweisungen in Form von «variable=Wert» zulässig sind. Zum Beispiel können in der Funktion «def f(a, b, /, c, d, *, e, f):» die Variablen «a» und «b» nur in der Reihenfolge der Wertangabe zugewiesen werden,
die Variablen «e» und «f» nur durch Zuweisungen «variable=Wert», und die Variablen «c» und «d» auf beliebige der angeführten Weisen:f(10, 20, 30, 40, e=50, f=60)
f(10, 20, c=30, d=40, e=50, f=60) - neue C-API
zur Einstellung der Initialisierungsparameter von Python, die eine vollständige Kontrolle über die gesamte ermöglicht und erweiterte Möglichkeiten zur Fehlerbehandlung bietet. Die vorgeschlagene API erleichtert das Einbetten der Funktionalität des Python-Interpreters in andere Anwendungen in C; - neues Vectorcall-Protokoll für einen schnelleren Zugriff auf in C geschriebene Objekte. In CPython 3.8 ist der Zugriff auf Vectorcall vorerst auf interne Nutzung beschränkt, die Umstellung auf öffentlich verfügbare APIs ist für CPython 3.9 geplant;
- Runtime Audit Hooks, die Anwendungen und Frameworks in der Programmiersprache Python Zugriff auf niedrigstufige Informationen über den Verlauf der Skriptausführung gewähren, um eine Prüfung der durchgeführten Aktionen durchzuführen (zum Beispiel kann man den Import von Modulen, das Öffnen von Dateien, die Verwendung von Tracing, den Zugriff auf Netzsockets, das Ausführen von Code über exec, eval und run_mod verfolgen);
- Im Modul unterstützt das Pickle 5-Protokoll, das zur Serialisierung und Deserialisierung von Objekten verwendet wird. Pickle optimiert die Übertragung großer Datenmengen zwischen Python-Prozessen in Multi-Core- und Multi-Node-Konfigurationen, indem es die Anzahl der Speicheroperationen reduziert und zusätzliche Optimierungstechniken anwendet, wie die Verwendung von datenspezifischen Kompressionsalgorithmen. Die fünfte Version des Protokolls ist bemerkenswert durch die Einführung des Out-of-Band-Übertragungsmodus, bei dem Daten separat vom Haupt-Pickle-Stream übertragen werden können.
- Standardmäßig ist die vierte Version des Pickle-Protokolls aktiviert, die im Vergleich zur vorher standardmäßig angebotenen dritten Version eine höhere Leistung und eine verringerte Größe der übertragenen Daten ermöglicht;
- Im Modul wurden mehrere neue Möglichkeiten eingeführt:
- Klasse für assoziative Arrays, in denen für die mit Schlüsseln verknüpften Daten explizit Informationen über den Typ festgelegt werden („TypedDict(‘Point2D’, x=int, y=int, label=str)“).
- Typ , das es ermöglicht, einen Parameter oder einen Rückgabewert auf mehrere vordefinierte Werte zu beschränken („Literal[‘connected’, ‘disconnected’]“).
- Die Konstruktion „“, die 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“).
- Die Möglichkeit wurde hinzugefügt, einen Cache für kompilierten Bytecode zuzuweisen, der in einem separaten Dateisystembaum gespeichert wird und von den Codeverzeichnissen getrennt ist. Der Pfad zum Speichern von Bytecode-Dateien wird über die Variable oder die Option „-X pycache_prefix“ festgelegt;
- die Möglichkeit zur Erstellung von Debug-Builds von Python, die ein identisches ABI wie die Release-Version verwenden, was es ermöglicht, in Debug-Builds Erweiterungen, die in C geschrieben sind, zu laden, die für stabile Versionen kompiliert wurden;
- In f-Zeilen (formatierte Literale mit dem Präfix ‚f‘) wird der Operator „=“ unterstützt (zum Beispiel „f'{expr=}'“), der es ermöglicht, einen Ausdruck zur Textausgabe zu konvertieren, um das Debugging zu erleichtern. 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)“ - Der Ausdruck „“ darf innerhalb des Blocks ;
- Ein neues Modul wurde hinzugefügt , das die Verwendung von Segmenten des gemeinsamen Speichers in Multiprozesskonfigurationen ermöglicht;
- Auf der Windows-Plattform wurde die Implementierung von asyncio auf die Verwendung der Klasse ;
- Die Leistung der LOAD_GLOBAL-Anweisung wurde durch die Nutzung eines neuen Mechanismus zur Zwischenspeicherung des Bytecodes um etwa 40 % verbessert.
Quelle: opennet.ru
