What is print(f"...")
The f
means Formatted string literals and it's new in Python 3.6
.
A formatted string literal or f-string is a string literal that is prefixed with
'f'
or'F'
. These strings may contain replacement fields, which are expressions delimited by curly braces{}
. While other string literals always have a constant value, formatted strings are really expressions evaluated at run time.
Some examples of formatted string literals:
>>> name = "Fred"
>>> f"He said his name is {name}."
"He said his name is Fred."
>>> name = "Fred"
>>> f"He said his name is {name!r}."
"He said his name is Fred."
>>> f"He said his name is {repr(name)}." # repr() is equivalent to !r
"He said his name is Fred."
>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal("12.34567")
>>> f"result: {value:{width}.{precision}}" # nested fields
result: 12.35
>>> today = datetime(year=2017, month=1, day=27)
>>> f"{today:%B %d, %Y}" # using date format specifier
January 27, 2017
>>> number = 1024
>>> f"{number:#0x}" # using integer format specifier
0x400
In Python 3.6, the f-string was introduced(PEP 498). In short, it is a way to format your string that is more readable and fast.
Example:
agent_name = 'James Bond'
kill_count = 9
# old ways
print('{0} has killed {1} enemies '.format(agent_name,kill_count))
# f-strings way
print(f'{agent_name} has killed {kill_count} enemies')
The f
or F
in front of strings tell Python to look at the values inside {} and substitute them with the variables values if exists. The best thing about f-formatting is that you can do cool stuff in {}, e.g. {kill_count * 100}
.
You can use it to debug using print e.g.
print(f'the {agent_name=}.')
# the agent_name='James Bond'
Formatting, such as zero-padding, float and percentage rounding is made easier:
print(f'{agent_name} shoot with {9/11 : .2f} or {9/11: .1%} accuracy')
# James Bond shoot with 0.82 or 81.8% accuracy
There is much more. Readings:
- PEP 498 Literal String Interpolation
- Python String Formatting
the f string is also known as the literal string to insert a variable into the string and make it part so instead of doing
x = 12
y = 10
word_string = x + ' plus ' + y + 'equals: ' + (x+y)
instead, you can do
x = 12
y = 10
word_string = f'{x} plus {y} equals: {x+y}'
output: 12 plus 10 equals: 22
this will also help with spacing due to it will do exactly as the string is written
A string prefixed with 'f'
or 'F'
and writing expressions as {expression}
is a way to format string, which can include the value of Python expressions inside it.
Take these code as an example:
def area(length, width):
return length * width
l = 4
w = 5
print("length =", l, "width =", w, "area =", area(l, w)) # normal way
print(f"length = {l} width = {w} area = {area(l,w)}") # Same output as above
print("length = {l} width = {w} area = {area(l,w)}") # without f prefixed
Output:
length = 4 width = 5 area = 20
length = 4 width = 5 area = 20
length = {l} width = {w} area = {area(l,w)}