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.

In Pocket speichern vorlesen Druckansicht 44 Kommentare lesen
Python
Lesezeit: 3 Min.
Inhaltsverzeichnis

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.

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.

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:
        ...

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)