Literal format strings were introduced in PEP 498 (Python3.6 and upwards), allowing you to prepend f
to the beginning of a string literal to effectively apply .format
to it with all variables in the current scope.
>>> foo = 'bar'
>>> f'Foo is {foo}'
'Foo is bar'
This works with more advanced format strings too, including alignment and dot notation.
>>> f'{foo:^7s}'
' bar '
Note: The f''
does not denote a particular type like b''
for bytes
or u''
for unicode
in python2. The formating is immediately applied, resulting in a normal stirng.
The format strings can also be nested:
>>> price = 478.23
>>> f"{f'${price:0.2f}':*>20s}"
'*************$478.23'
The expressions in an f-string are evaluated in left-to-right order. This is detectable only if the expressions have side effects:
>>> def fn(l, incr):
... result = l[0]
... l[0] += incr
... return result
...
>>> lst = [0]
>>> f'{fn(lst,2)} {fn(lst,3)}'
'0 2'
>>> f'{fn(lst,2)} {fn(lst,3)}'
'5 7'
>>> lst
[10]