Formatierende Zeichenfolgenliterale in Python
Eine formatierendes Zeichenfolgenliteral beginnt mit einem »f« und wird in vielen Fällen wie ein Zeichenfolgenliteral ohne »f« interpretiert.
- Auswertung
f'abc'
'abc'
Auswertungen innerhalb von Zeichenfolgenliteralen
In geschweiften Klammern enthaltene Zeichenfolgen werden als Ausdrücke interpretiert. Diese Ausdrücke werden ausgewertet, ihr Wert wird dann mit »str« als Zeichenfolge dargestellt und an der Stelle der geschweiften Klammern eingefügt.
- Auswertung
f'abc{ 1 + 1 }'
'abc2'
- Auswertung
f'abc{1+1}'
'abc2'
Gleichzeitige Darstellung von Ausdruck und Wert
Folgt dem Ausdruck in den geschweiften Klammern ein Gleichheitszeichen, so wird zuerst der Ausdruck, dann ein Gleichheitszeichen und dann die str-Darstellung des Wertes des Ausdrucks eingefügt.
- Auswertung
f'abc{1+1=}'
'abc1+1=2'
- Auswertung
f'abc{ 1 + 1 = }'
'abc 1 + 1 = 2'
Formatierungsspezifikationen
Vor der schließenden geschweiften Klammer kann noch eine durch einen Doppelpunkt eingeleitete Formatierungsspezifikation stehen. ».3f« verlangt eine Darstellung des Wertes ohne die Exponentialschreibweise und mit drei Nachkommastellen.
- Konsolenprotokoll
from math import pi
f'{pi}'
'3.141592653589793'
- Konsolenprotokoll
from math import pi
f'{pi=}'
'pi=3.141592653589793'
- Konsolenprotokoll
from math import pi
f'{pi:.3}'
'3.142'
- Konsolenprotokoll
from math import pi
f'{pi=:.3}'
'pi=3.142'
Bei Angabe von Nachkommastellen kann das »f« auch entfallen. Das folgende Beispiel zeigt, daß die Python -Implementation ein Zehntel mit dem Datentyp ›float‹ nur näherungsweise darstellen kann.
- Konsolenprotokoll
f'{1/10=:.20}'
'1/10=0.10000000000000000555'
Ein »x« verlangt die Darstellung im Hexadezimalsystem.
- Konsolenprotokoll
f'{20:x}'
'14'
- Konsolenprotokoll
f'{"abcdef":<10}'
'abcdef '
- Konsolenprotokoll
f'{"abcdef":>10}'
' abcdef'
- Konsolenprotokoll
f'{"abcdef":10}'
'abcdef '
- Konsolenprotokoll
f'{"abcdef":.3}'
'abc'
- Konsolenprotokoll
f'{"abcdef":10.3}'
'abc '
Die Spezifikator »d« (an Stelle von »f«) formatiert ganze Zahlen.
- Konsolenprotokoll
f"{1000:d}"
'1000'
Der Spezifikator »n« wirkt wie »d«, verwendet aber das Gebietsschema zur Formatierung, wie das folgende Beispiel zeigt.
- deutsches Schema
from locale import setlocale, LC_ALL
setlocale( LC_ALL, 'de' )
'de'
f"{1000:n}"
'1.000'
- englisches Schema
from locale import setlocale, LC_ALL
setlocale( LC_ALL, 'en' )
'en'
f"{1000:n}"
'1,000'
Morphologie
- Morphologisches Diagramm (leicht vereinfacht)
f_string
|-|---.------------------.--->|-|
^ |
| .---------. |
'---| f_entry |<---'
'---------'f_entry
.--------------.
|-|---.------>| literal_char |-----.--->|-|
| '--------------' ^
| .--. |
'----------->( {{ )----------'
| '--' |
| .--. |
'----------->( }} )----------'
| '--' |
| .-------------------. |
'--->| replacement_field |---'
'-------------------'literal_char
.-----------------------.
|-|--->| Jedes Zeichen ausser |--->|-|
| geschweiften Klammern |
'-----------------------'replacement_field
.-----------------------.
.-. .----------. | .--------------. v .-.
|-|--->( { )--->| Ausdruck |---'--->| Formatierung |---'--->( } )--->|-|
'-' '----------' '--------------' '-'Formatierung
.-------------------.
|-|---.--->| literal_char |---.--->
| '-------------------' ^
| .-------------------. |
'--->| replacement_field |---'
'-------------------'
Quellen
- Quelle
The Python Language Reference, Release 3.8.0a0, section 2.4.3 Formatted string literals
The Python Library Reference, Release 3.9.0a3, section 6.1.3 Format String Syntax