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
