Python 3.8 bringt Assignment Expressions

Die Programmiersprache erhält einige neue Sprachfeatures und eine C-API zum Konfigurieren der Initialisierung.

In Pocket speichern vorlesen Druckansicht 26 Kommentare lesen
Python 3.8 bringt Assignment Expressions
Lesezeit: 3 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Noch vor dem ursprünglich geplanten Release-Datum am 21. Oktober ist Python 3.8 erschienen. Die Programmiersprache bringt unter anderem Assignment Expressions und positionsbestimmte Parameter (Positional-only Parameters) als neue Sprachfeatures. Außerdem existiert eine neue C-API zum Konfigurieren der Initialisierung. Das Release ist eine gute Gelegenheit zum Umstieg für diejenigen, die noch auf Python 2.x setzen: Der Support läuft zum Jahresende aus.

heise Developer hatte bereits im Zuge des Erscheinens der ersten Beta ausführlich mit Codebeispielen über die Neuerungen in Python 3.8 berichtet, und an den wesentlichen Funktionen hat sich erwartungsgemäß nichts geändert. Daher beschränkt sich diese Meldung auf eine kurze Zusammenfassung der wichtigen Ergänzungen.

Durch die in PEP 572 (Python Enhancement Proposal) beschriebenen Assignment Expressions lassen sich Python-Expressions einer Variable zuweisen und anschließend im Code verwenden. Die Syntax ist NAME := expr, wobei Letzteres ein nahezu beliebiger Ausdruck ist – Ausnahme sind nicht eingeklammerte Tupel. Assignment Expressions ermöglichen kompakteren, übersichtlicheren Code und vermeiden wiederholte Berechnungen.

Je nach Position sind Klammern notwendig, außerdem sind Assignment Expressions nicht an all den Stellen erlaubt, an denen Assignment Statements stehen dürfen. Unter anderem lassen sich mehrere Ziele nur durch das passende Setzen von Klammern zuweisen. Für Zuweisungen wie a[i] = x existieren zudem keine entsprechenden Assignment Expressions, und Operatoren wie += sind nicht erlaubt.

Bei den in PEP 570 beschriebenen Positional-only Parameters bestimmt die Position die Zuweisung an die Parameter, und eine namentliche Festlegung ist nicht erlaubt. Das Konzept existiert bereits in einigen builtin-Funktionen von CPython wie pow(x, y[,z]).

Die rein positionsbestimmten Parameter dürfen am Anfang einer Parameterliste stehen, und ihnen folgt ein / zur Kennzeichnung. Anschließend dürfen zunächst positions- oder Keyword-bestimmte Parameter und nach dem trennenden * am Schluss rein Keyword-bestimmte Parameter folgen. Da die Syntax die bisherige erweitert, ist sie vollständig rückwärtskompatibel.

Das PEP 587 sieht eine neue C-API zum Konfigurieren von Python beim Initialisieren vor. Die darin enthaltenen Strukturen PyConfig, PyPreConfig, PyStatus und PyWideStringList bieten einheitliche Funktionen zum Setzen einzelner Parameter und zum Lesen und Löschen der Konfiguration. Entwickler können berechnete Parameter auslesen und überschreiben, bevor sie die Konfiguration anwenden.

Neu ist zudem die Option, über PyPreConfig_InitIsolatedConfig() und PyConfig_InitIsolatedConfig() eine vom System isolierte Konfiguration zu erstellen, die globale Konfigurations- und Umgebungsvariablen ebenso ignoriert wie Kommandozeilenparameter.

Weitere Neuerungen sind das PEP 590 mit einem sogenannten vectorcall-Protokoll, einer C-API, die den Aufruf von Objekten optimieren soll, PEP 578 mit zwei APIs, die Test- beziehungsweise Logging-Frameworks und Security-Tools Einblick in eine laufende Python-Anwendung geben soll, sowie PEP 574 für ein neues Pickle-Protokoll zur Serialisierung von Objekten. Daneben gibt es einige Ergänzungen der Syntax. Unter anderem ist nun continue in finally:-Blöcken erlaubt.

Weitere Neuerungen lassen sich der offiziellen Ankündigung von Python 3.8 entnehmen. Die vollständige Liste der Änderungen stehen im Changelog.

Siehe dazu auf heise Developer:

(rme)