Python f-Strings

Ernesto Rico Schmidt am 7. Mai 2018

Die vierte Variante von Strings ist die gewinnende: f-Strings.

Eigentlich hatte Python bisher (bis Python 3.5) drei Arten Strings zu formatieren:

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".