W3docs

Format Strings

Alle drei Methoden zur String-Formatierung in Python — %-Operator, str.format() und f-Strings — mit Beispielen zu Zahlen, Ausrichtung und praktischer Anwendung.

String-Formatierung bezeichnet das Einbetten von Variablenwerten in Text. Python bietet drei Ansätze: den veralteten %-Operator, die vielseitige str.format()-Methode und die moderne f-String-Syntax, die in Python 3.6 eingeführt wurde. Für einfache Fälle liefern alle drei das gleiche Ergebnis, unterscheiden sich jedoch in Leistungsfähigkeit, Lesbarkeit und der erforderlichen Python-Version.

Dieses Kapitel behandelt:

  • Den %-Operator und seine Typencodes
  • str.format() mit positionellen, indexbasierten und Schlüsselwort-Platzhaltern
  • f-Strings — inline Ausdrücke und den =-Debug-Spezifizierer
  • Format-Spezifizierer: Breite, Ausrichtung, Genauigkeit und Zahlensysteme
  • Die Wahl der richtigen Methode für Ihre Situation

Verwandte Kapitel: Python Strings · Strings verketten · Escape-Zeichen · String-Methoden

Der %-Operator

Der %-Operator ist der älteste String-Formatierungsstil in Python und wurde von C's printf übernommen. Sie platzieren Typencodes als Platzhalter innerhalb des Strings und geben die Werte nach dem %-Zeichen an.

Häufige Typencodes

CodeBedeutungBeispiel-EingabeAusgabe
%sString (oder beliebiges Objekt)"Alice"Alice
%dGanzzahl4242
%fFließkommazahl3.143.140000
%rrepr() des Objekts"hi\n"'hi\n'

Strings formatieren mit %s und %d

python— editable, runs on the server
My name is John and I am 30 years old.

Wenn Sie mehr als einen Wert haben, übergeben Sie diese in einem Tupel. Die Werte werden den Platzhaltern von links nach rechts zugewiesen:

item = "coffee"
price = 2.50
qty = 3
print("Item: %s | Price: $%.2f | Qty: %d" % (item, price, qty))
Item: coffee | Price: $2.50 | Qty: 3

Der %.2f-Formatcode rundet die Fließkommazahl auf 2 Dezimalstellen.

Wann % verwenden: Hauptsächlich bei der Arbeit mit sehr altem Code oder Python-2-Codebasen. Für neuen Code bevorzugen Sie str.format() oder f-Strings.

str.format()

Die str.format()-Methode verwendet geschweifte Klammern {} als Platzhalter und ist flexibler als %. Sie unterstützt positionelle Argumente, indexbasierte Wiederverwendung und benannte Schlüsselwort-Argumente.

Positionelle Platzhalter

Leere {}-Klammern werden von links nach rechts mit den Argumenten gefüllt, die Sie an format() übergeben:

Strings mit der format-Methode in Python formatieren

python— editable, runs on the server
My name is John and I am 30 years old.

Indexbasierte Platzhalter

Geben Sie eine Zahl in die Klammern ein, um ein bestimmtes Argument auszuwählen. Sie können dasselbe Argument auch mehrfach verwenden:

name = "John"
age = 30
print("{0} is {1} years old and {0} likes Python.".format(name, age))
John is 30 years old and John likes Python.

Schlüsselwort-Platzhalter

Verwenden Sie Schlüsselwortnamen für die lesbarste Formatierung. Dadurch können Sie die Werte unabhängig von der Argumentliste neu anordnen:

name = "John"
age = 30
print("{name} is {age} years old.".format(name=name, age=age))
John is 30 years old.

Sie können ein Dictionary direkt mit ** entpacken:

person = {"name": "Alice", "city": "London"}
print("{name} lives in {city}.".format(**person))
Alice lives in London.

f-Strings (Python 3.6+)

f-Strings (formatierte String-Literale) werden durch Voranstellen von f oder F vor den String geschrieben. Jeder Ausdruck innerhalb von {} wird zur Laufzeit ausgewertet und in einen String umgewandelt. Sie sind die schnellste und lesbarste Option für modernen Python-Code.

Strings mit f-Strings in Python formatieren

python— editable, runs on the server
My name is John and I am 30 years old.

Da die Klammern jeden gültigen Python-Ausdruck enthalten können, sind Sie nicht auf einfache Variablennamen beschränkt:

x = 10
y = 3
print(f"{x} divided by {y} is {x / y:.2f}")
10 divided by 3 is 3.33

Der =-Debug-Spezifizierer (Python 3.8+)

Fügen Sie = nach dem Variablennamen hinzu, um sowohl den Variablennamen als auch seinen Wert auszugeben — sehr nützlich für schnelles Debuggen:

val = 42
result = val * 2
print(f"{val=}, {result=}")
val=42, result=84

Format-Spezifizierer

Alle drei Methoden unterstützen eine Mini-Sprache zur Steuerung der Darstellung von Werten. Die Syntax innerhalb von {} für format() und f-Strings lautet:

{[value]:[fill][align][sign][width][grouping][.precision][type]}

Ausrichtung und Breite

Verwenden Sie < (linksbündig), > (rechtsbündig) oder ^ (zentriert) zusammen mit einer Breitenangabe:

name = "John"
print(f"|{name:<10}|")   # left-align in a field of width 10
print(f"|{name:>10}|")   # right-align
print(f"|{name:^10}|")   # center
|John      |
|      John|
|   John   |

Sie können vor dem Ausrichtungssymbol ein Füllzeichen angeben:

print(f"|{'hello':*^15}|")  # fill with * and center
|*****hello*****|

Dezimalgenauigkeit

pi = 3.14159265
print(f"Pi is approximately {pi:.2f}")   # 2 decimal places
print(f"Pi is approximately {pi:.4f}")   # 4 decimal places
Pi is approximately 3.14
Pi is approximately 3.1416

Zahlenformatierung

price = 1234567.89
print(f"{price:,.2f}")   # comma as thousands separator
print(f"{price:e}")      # scientific notation
1,234,567.89
1.234568e+06

Um ein Verhältnis als Prozentzahl darzustellen, verwenden Sie den %-Typspezifizierer:

ratio = 0.853
print(f"{ratio:.1%}")
85.3%

Ganzzahl-Zahlensysteme

x = 255
print(f"{x:d}")    # decimal   -> 255
print(f"{x:x}")    # hex lower -> ff
print(f"{x:X}")    # hex upper -> FF
print(f"{x:o}")    # octal     -> 377
print(f"{x:b}")    # binary    -> 11111111
255
ff
FF
377
11111111

Dieselben Spezifizierer funktionieren auch mit str.format():

print("{:b}".format(255))   # 11111111
print("{:x}".format(255))   # ff

Null-Auffüllung

Füllen Sie eine Ganzzahl mit führenden Nullen auf eine feste Breite auf, indem Sie 0 vor die Breite setzen:

print(f"{42:010d}")   # zero-pad to 10 digits
0000000042

Die richtige Methode wählen

SituationBeste Wahl
Python 3.6 oder neuerf-String
Muss Python 2 unterstützen%-Operator
Wiederverwendung desselben Template-Stringsstr.format() mit einer Variable
Templates zur Laufzeit erstellenstr.format()
Schnelle Debug-Ausgabef-String mit =-Spezifizierer
Alte Codebasis pflegenDen bereits verwendeten Stil beibehalten

f-Strings sind die empfohlene Standardwahl für jeden neuen Python-3-Code. Sie sind schneller als str.format() (kein Methoden-Aufruf-Overhead) und lesbarer als %.

Übungen

Übung
Which of the following are correct ways to format strings in Python according to the content on the provided URL?
Which of the following are correct ways to format strings in Python according to the content on the provided URL?
Was this page helpful?