Python f-Strings
Die vierte Variante von Strings ist die gewinnende: f-Strings.
Eigentlich hatte Python bisher (bis Python 3.5) drei Arten Strings zu formatieren:
-
die
str.format
-Methode, und -
die
string.Template
s.
Jede Variante hat ihre Vor- und Nachteile und mit dem PEP 498 – Literal String Interpolation ist im vierten Anlauf, meiner Meinung nach, die beste Lösung gefunden worden.
Wie Daniel Roy Greenfeld in Python F-Strings are fun! erklärt, gab es schon Alternativen, die zum selben Ergebnis führen, mehr oder weniger kompliziert bzw. lesbar.
one, two = 1, 2
_format = '{},{}'.format(one, two)
_percent = '%s,%s' % (one, two)
_concatenation = str(one) + ',' + str(two)
_join = ','.join((str(one),str(two)))
assert _format == _percent == _concatenation == _join
Jetzt ab Python 3.6 mit den f-Strings schaut die Sache auf den ersten Blick nicht besonders innovativ, oder anders als bisher aus, lediglich vielleicht etwas besser lesbar:
_fstring = f'{one},{two}'
assert _fstring == _format == _percent == _concatenation == _join
Aber die f-Strings sind nicht nur weniger verbose, sondern einfach mächtiger:
_fstring = f'Total: {one + two}' # Go f-string!
_format = 'Total: {}'.format(one + two)
_percent = 'Total: %s' % (one + two)
_concatenation = 'Total: ' + str(one + two)
assert _fstring == _format == _percent == _concatenation
Mit den F-Strings lassen sich Ausdrücke (expressions) in den Strings einbetten:
>>> import datetime
>>> name = 'Fred'
>>> age = 50
>>> anniversary = datetime.date(1991, 10, 12)
>>> f'My name is {name}, my age next year is {age+1}, my anniversary is {anniversary:%A, %B %d, %Y}.'
'My name is Fred, my age next year is 51, my anniversary is Saturday, October 12, 1991.'
>>> f'He said his name is {name!r}.'
"He said his name is 'Fred'."
Das einzige Problem, das ich damit habe: Ich kann es für diese Seite noch nicht einsetzten, da bin ich bis auf weiteres, auf Python 3.5 eingeschränkt.
Die Suche nach einer guten Schnittstelle für Datum und Zeit ist, nicht nur bei Python, eine immer noch offene, aber dazu ein anderes Mal mehr. Hoffentlich wird auch bald eine passende für Python gefunden.
Jemand, den ich kenne, würde darauf, wie aus der Pistole geschossen, mit einem
Zitat von Bill Joy (Mitgründer von Sun Microsystems und ursprünglicher Autor
von vi
) antworten “hope is a lousy
defense”.