Programmiersprache Python 3.12 erlaubt flexiblere Syntax fĂĽr F-Strings
Das Major Release von Python hebt Einschränkungen für F-Strings auf, aktualisiert die Syntax für generische Klassen und bereinigt die Standard-Library.
Pünktlich hat die Python Software Foundation Python 3.12 im Einklang mit dem Releasezyklus veröffentlicht, der jedes Jahr ein neues Major Release vorsieht. Die Programmiersprache kann nun unter anderem eine klarere Syntax, eine höhere Performance, eine verschlankte Standard-Library und aussagekräftigere Fehlermeldungen vorweisen. Für F-Strings hat das Entwicklungsteam einige bestehende Einschränkungen aufgehoben, um ihren flexibleren Einsatz zu ermöglichen.
Neue Möglichkeiten für F-Strings
Bereits seit der ersten Beta-Version im Mai 2023 gilt Python 3.12 als Feature Complete. Zu den Neuerungen zählt ein flexiblerer Umgang mit F-Strings. Seit Python 3.6 sind F-Strings oder formatierte String-Literale ein Teil der Programmiersprache und vereinfachen die Integration von Ausdrücken in Strings.
Python 3.12 bringt nun mit dem Python Enhancement Proposal (PEP) 701 eine syntaktische Formalisierung der einst mit PEP 498 eingeführten F-Strings. Damit gelten nun einige Einschränkungen nicht mehr. Anführungszeichen innerhalb eines Ausdrucks wie in folgendem Beispiel führten bislang zu einer Fehlermeldung aufgrund invalider Syntax:
>>> f'Magic wand: { bag['wand'] }'
Mit PEP 701 lassen sich nun in einer Ausdruckskomponente jegliche String-Literale platzieren, die in einem gewöhnlichen Python-Ausdruck vorkommen könnten. Das eröffnet die Möglichkeit, String-Literale, ob formatiert oder nicht, innerhalb der Ausdruckskomponente eines F-Strings mit dem gleichen Anführungszeichentyp zu verschachteln:
>>> f"These are the things: {", ".join(things)}"
>>> f"{source.removesuffix(".py")}.c: $(srcdir)/{source}"
>>> f"{f"{f"infinite"}"}" + " " + f"{f"nesting!!!"}"
Ein ähnliches Verhalten ist bereits aus anderen Programmiersprachen wie JavaScript, Ruby oder C# bekannt. Wie das PEP ausführt, sind Python-User darüber jedoch geteilter Meinung. In einer dedizierten Umfrage geben beispielsweise 68 Prozent an, dass sie das Wiederverwenden von Anführungszeichen in F-Strings befürworten, während 32 Prozent die Funktion ablehnen. Allerdings haben an der seit Dezember 2022 laufenden Befragung lediglich 159 Personen teilgenommen.
Zu den weiteren F-String-Neuerungen zählt das Verwenden von Backslashs (\
) innerhalb der Ausdruckskomponente.
Modernisierte Syntax fĂĽr generische Klassen
Eine Syntax-Ă„nderung gibt es auch in einem weiteren Bereich: PEP 695 beschreibt eine neue Syntax zum Spezifizieren von Typ-Parametern in generischen Typ-Aliasen, Funktionen und Klassen. Sie ist an andere Programmiersprachen angelehnt, die mit generischen Typen umgehen.
Das Python-Entwicklungsteam stellt die alte und neue Schreibweise zum Definieren einer generischen Klasse gegenĂĽber. Bislang sah die Syntax dafĂĽr aus wie folgt:
from typing import Generic, TypeVar
_T_co = TypeVar("_T_co", covariant=True, bound=str)
class ClassA(Generic[_T_co]):
def method1(self) -> _T_co:
...
KĂĽrzer geht das nun mit Python 3.12:
class ClassA[T: str]:
def method1(self) -> T:
...
Updates fĂĽr Standard-Library, Performance und Fehlermeldungen
Neben dem Einführen neuer Features entfernt das Release nicht länger benötigte Bestandteile aus der Standard-Library. Dazu zählt das Package distutils, das dem Erstellen und Integrieren zusätzlicher Module in einer Python-Installation diente. Wer die darin enthaltenen APIs ersetzen möchte, findet Hinweise im Migrationsguide des PEP 632, das bereits seit September 2020 auf die Entfernung von distutils aus der Standard-Library hinweist. Entwicklerinnen und Entwickler, die distutils weiterhin verwenden möchten, können auf das Drittanbieter-Tool Setuptools zurückgreifen.
Zu den weiteren seit der Beta-Version bekannten Updates zählen aussagekräftigere Fehlermeldungen sowie eine erhöhte Performance unter anderem durch einen veränderten Einsatz von Comprehensions.
Die Neuerungen in Python 3.12 finden sich in der AnkĂĽndigung und der Dokumentation. Auf der offiziellen Website steht die neue Hauptversion zum Download bereit.
(mai)