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
| Code | Bedeutung | Beispiel-Eingabe | Ausgabe |
|---|---|---|---|
%s | String (oder beliebiges Objekt) | "Alice" | Alice |
%d | Ganzzahl | 42 | 42 |
%f | Fließkommazahl | 3.14 | 3.140000 |
%r | repr() des Objekts | "hi\n" | 'hi\n' |
Strings formatieren mit %s und %d
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: 3Der %.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
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
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.33Der =-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=84Format-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 placesPi is approximately 3.14
Pi is approximately 3.1416Zahlenformatierung
price = 1234567.89
print(f"{price:,.2f}") # comma as thousands separator
print(f"{price:e}") # scientific notation1,234,567.89
1.234568e+06Um 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 -> 11111111255
ff
FF
377
11111111Dieselben Spezifizierer funktionieren auch mit str.format():
print("{:b}".format(255)) # 11111111
print("{:x}".format(255)) # ffNull-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 digits0000000042Die richtige Methode wählen
| Situation | Beste Wahl |
|---|---|
| Python 3.6 oder neuer | f-String |
| Muss Python 2 unterstützen | %-Operator |
| Wiederverwendung desselben Template-Strings | str.format() mit einer Variable |
| Templates zur Laufzeit erstellen | str.format() |
| Schnelle Debug-Ausgabe | f-String mit =-Spezifizierer |
| Alte Codebasis pflegen | Den 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 %.