Die interessantesten Neuerungen:
- Zuweisungs-Ausdruck:
Der neue Operator := ermöglicht es, Variablen innerhalb von Ausdrücken Werte zuzuweisen. Beispiel:
if (n := len(a)) > 10:
print(f"Liste ist zu lang ({n} Elemente, erwartet <= 10)") - Positionale-only Argumente:
Jetzt kann man angeben, welche Funktionsparameter über die Syntax von benannten Argumenten übergeben werden können und welche nicht. Beispiel:
def f(a, b, \/, c, d, *, e, f):
print(a, b, c, d, e, f)f(10, 20, 30, d=40, e=50, f=60) # OK
f(10, b=20, c=30, d=40, e=50, f=60) # Fehler, `b` kann kein benanntes Argument sein
f(10, 20, 30, 40, 50, f=60) # Fehler, `e` muss ein benanntes Argument seinDiese Änderung gibt Entwicklern die Möglichkeit, Benutzer ihrer APIs vor Änderungen bei den Namen der Funktionsargumente zu schützen.
- Unterstützung für f-Strings = für selbstdokumentierende Ausdrücke und Debugging:
Zucker hinzugefügt, um Debugging-/Logging-Nachrichten zu vereinfachen.
n = 42
print(f'Hallo Welt {n=}.')
# напечатает "Hello world n=42." - Das Schlüsselwort continue im finally-Block wurde korrigiert (früher funktionierte es nicht).
Sonstiges:
- Der Pfad zum Bytecode-Cache kann explizit angegeben werden, anstelle des Standardverzeichnisses __pycache__.
- Debug- und Release-Bauten verwenden dasselbe ABI.
Quelle: linux.org.ru
