Python 3.8 ist erhältlich und bringt neben der Walross-Operator Verbesserungen mit, die es kompatibler zur Programmiersprache C machen.
Dank einer neuen Funktionsparameter-Syntax lassen sich bestimmte Parameter ausschließlich als Keywords oder positional verwenden, das heißt, ihnen lassen sich keine neuen Werte zuweisen. Ein Beispiel bringt die Python-3.8-Ankündigung auch:
def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
Hier sind a und b rein positional, c und d dürfen wahlweise positional oder Keywords sein und e und f müssen Keywords sein. Was dank dieser Schreibweise nicht mehr geht, zeigt die Ankündigung ebenfalls:
f(10, b=20, c=30, d=40, e=50, f=60) # b cannot be a keyword argument f(10, 20, 30, 40, 50, f=60) # e must be a keyword argument
Ein großer Vorteil dieser Änderungen, die das PEP 570 im Details beschreibt, besteht darin, dass pure Python-Funktionen nun C-Funktionen komplett emulieren können.
Auch neu sind die mit PEP 578 eingeführten Runtime Audit und Verified Open Hooks. Dazu gehören neue C-APIs, die es Embedded-Entwicklern und C-Python-Implementierern erlauben, Audit Hook Messages zu senden und zu empfangen. Zugleich kann Python dank neuer APIs Audit Hooks empfangen und generieren.
Eine weitere Optimierung, die auch C betrifft, ist ein neues C-API, um die Python-Initialisierung einzurichten. Dazu erhält Python 3.8 vier neue Strukturen und mehr als 20 Funktionen, die insgesamt eine feinere Kontrolle über die Konfiguration erlauben und bessere Error Reports ermöglichen. Mehr dazu verrät PEP 587.
Walross an Bord
Der Walross-Operator ist ein neuer Assignment-Ausdruck, der die Komplexität des Codes in bestimmten Fällen reduzieren und dessen Lesbarkeit erhöhen kann. Er lässt sich zum Beispiel in einer If-Konstruktion einsetzen, wenn eine Funktion eigentlich doppelt aufgerufen werden müsste. Im Beispiel wäre das die “len()”-Funktion:
if (n := len(a)) > 10:
print(f"List is too long ({n} elements, expected <= 10)")
Auch in Fällen, in denen Entwickler ein Objekt in doppelter Ausführung benötigen, erweist sich der Walrus Operator als nützlich. Weitere Details dazu liefert PEP 572.
Pickle hilft, in Multicore- und Multimaschinen-Setups große Datenmengen zwischen Prozessen zu transferieren. Das Pickle-Protokoll 5 führt nun so genannte Out-of-Band-Datenpuffer ein. Die erlauben es, mit PEP 3118 kompatible Daten separat vom hauptsächlichen Pickle-Stream zu transferieren. Nicht zuletzt lässt sich über “PYTHONPYCACHEPREFIX” der Dateicache auf selbst gewählten Dateisystemen unterbringen.



