Die Formatierung, die du tatsächlich nutzen wirst
f-Strings sind der Standardweg, wie moderner Python-Code Werte in Text einbettet. Setz ein f vor das öffnende Anführungszeichen, und alles in {...} wird zu einem lebendigen Ausdruck:
Drei Dinge fallen auf. Das f-Präfix macht das ganze Literal zur Schablone. Die Klammern sind die Einsetzstellen. Und der Ausdruck in den Klammern wird in dem Moment ausgewertet, in dem print läuft, nicht als der String geschrieben wurde.
f-Strings schreibst du weit häufiger als jeden anderen Formatierungsstil. Sie sind kürzer als "Hello, " + name + ".", klarer als "Hello, %s." % name und flexibler als .format().
Alles, was sich auswerten lässt, passt rein
Die Klammern sind nicht auf Variablennamen beschränkt. Jeder Python-Ausdruck ist erlaubt:
Methodenaufrufe, Indexierung, Arithmetik, bedingte Ausdrücke — alles in Ordnung. Die eine Regel: halt, was zwischen den Klammern steht, kurz. Wenn du eine dreizeilige Berechnung in einen Platzhalter schreibst, rechne sie vorher in eine benannte Variable und setz nur den Namen ein.
Zahlen formatieren
Ein Doppelpunkt nach dem Ausdruck öffnet eine Formatangabe — eine kleine Sprache, um zu steuern, wie der Wert angezeigt wird:
Ein kurzer Leitfaden, was jedes Stück macht:
.2f— Float, zwei Stellen nach dem Punkt. Rundet die Anzeige.,— Komma als Tausendertrennzeichen. Funktioniert für int und float..1%— mit 100 multiplizieren und%anhängen. Ideal für Verhältnisse und Raten..2e— wissenschaftliche Notation mit zwei Nachkommastellen.
Du kannst sie kombinieren. f"{total:,.2f}" ergibt "1,234.57".
Auffüllen, Breite und Ausrichtung
Zum Ausrichten von Ausgabespalten:
<10 heißt „linksbündig, auf mindestens 10 Zeichen aufgefüllt“. >5 heißt „rechtsbündig, auf 5 aufgefüllt“. Für zentrierten Text nimmst du ^.
Mit etwas anderem als Leerzeichen auffüllen — das Füllzeichen vor dem Ausrichtungszeichen angeben:
Daten formatieren
Dieselbe {value:spec}-Syntax funktioniert mit datetime-Objekten:
Die Angabe nach dem Doppelpunkt ist ein strftime-Format-String. Jeder %-Code, den strftime kennt, funktioniert hier — die behandeln wir ausführlich auf der datetime-Seite.
Der =-Trick zum Debuggen
Eines der nützlichsten Nischen-Features: setz = hinter den Ausdruck, und Python gibt sowohl den Quelltext des Ausdrucks als auch seinen Wert aus:
Du bekommst count=7, price=19.99, count * price=139.93. Das ist ein komplettes print("count =", count) in drei Zeichen. Merkenswert für das nächste Mal, wenn du debuggst und ein paar Werte ausgeben willst.
Klammern entwerten
Brauchst du ein wörtliches { oder } in der Ausgabe, verdopple sie:
Einfache Klammern öffnen einen Ausdruck; {{ und }} stehen in der Ausgabe für { und }.
Mehrzeilige f-Strings
f-Strings spielen gut mit dreifachen Anführungszeichen zusammen, was beim Bauen kleiner Templates inline hilft:
Du kannst einen langen f-String auch auf mehrere nebeneinanderliegende String-Literale aufteilen — Python verkettet sie automatisch:
Wann die alten Stile noch auftauchen
In bestehendem Code begegnen dir zwei ältere Formatierungsstile:
Alle drei erzeugen dieselbe Ausgabe. f-Strings gewinnen in neun von zehn Fällen bei der Lesbarkeit. Greif zu .format(), wenn du eine Schablone einmal bauen und viele Male anwenden willst; zu % nur, wenn du älteren Code wartest, der es ohnehin nutzt.
Wofür sie nicht taugen
Zwei Situationen verlangen ein anderes Werkzeug.
SQL-Abfragen bauen. Interpoliere niemals Nutzereingaben mit einem f-String in einen SQL-String. Nimm die parametrisierten Abfragen deiner Datenbankbibliothek. Ein f-String dort ist der Weg, wie SQL-Injection passiert.
Übersetzte UI-Texte bauen. Wenn deine App mehrere Sprachen unterstützt, willst du eine Schablone, die externe Übersetzungswerkzeuge aufgreifen können — meist gettexts _(...) oder ein Framework-spezifischer Helfer. Ein f-String bettet die Struktur im Quelltext ein, was Übersetzung deutlich erschwert.
Für alles andere — Logs, Konsolenausgabe, URL-Bau, Config-Strings, Zahlen für die Anzeige — sind f-Strings die richtige Antwort.
Als Nächstes: Zahlen und Booleans
f-Strings machen einen großen Teil ihrer Arbeit beim Formatieren von Zahlen, daher lohnt es sich, die numerischen Typen etwas tiefer zu kennen. Das kommt als Nächstes.
Häufig gestellte Fragen
Was ist ein f-String in Python?
Ein f-String ist ein String-Literal mit einem vorangestellten f, bei dem alles innerhalb von {...} zur Laufzeit durch den Wert des Ausdrucks ersetzt wird. f"Hello, {name}" setzt den aktuellen Wert von name in den String ein.
Seit wann gibt es f-Strings in Python?
Seit Python 3.6. Jede moderne Python-Version unterstützt sie, du kannst f-Strings also überall nutzen, wo du heute Python-3-Code schreibst. Ältere Formatierungsstile (% und .format()) funktionieren weiterhin, lesen sich aber in den meisten Fällen weniger sauber.
Wie formatiere ich eine Zahl auf zwei Nachkommastellen in Python?
Nutz eine Formatangabe nach einem Doppelpunkt innerhalb der Klammern: f"{price:.2f}". Das .2f heißt „Float mit zwei Stellen nach dem Komma“. Es rundet die Anzeige; die ursprüngliche Zahl bleibt unverändert.
Kann ich jeden Ausdruck in einen f-String packen?
Ja — Arithmetik, Methodenaufrufe, Funktionsaufrufe, bedingte Ausdrücke. f"{name.upper()}" und f"{price * 1.2:.2f}" funktionieren beide. Halt Ausdrücke kurz; wenn der Code in den Klammern unübersichtlich wird, rechne ihn vorher in eine Variable.