blog
blog copied to clipboard
Python’s three string formatting syntaxes
References:
- https://docs.python.org/3/tutorial/inputoutput.html#fancier-output-formatting
- https://realpython.com/python-string-formatting/
- https://realpython.com/python-f-strings/
1. Old String Formatting: % Operator
printf-style String Formatting
The %
operator (modulo) can also be used for string formatting.
Given 'string' % values
, instances of %
in string
are replaced with zero or more elements of values
. This operation is commonly known as string interpolation.
>>> import math
>>> print('The value of pi is approximately %5.3f.' % math.pi)
The value of pi is approximately 3.142.
>>> name = 'Bob'
>>> 'Hello, %s' % name
'Hello, Bob'
>>> name = 'Alice'
>>> age = 18
>>> 'My name is %s. I am %s.' % (name, age)
'My name is Alice. I am 18.'
2. The String format() Method: str.format()
>>> print('We are the {} who say "{}!"'.format('knights', 'Ni'))
We are the knights who say "Ni!"
>>> print('{0} and {1}'.format('spam', 'eggs'))
spam and eggs
>>> print('{1} and {0}'.format('spam', 'eggs'))
eggs and spam
>>> print('This {food} is {adjective}.'.format(
... food='spam', adjective='absolutely horrible'))
This spam is absolutely horrible.
>>> for x in range(1, 11):
... print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x))
...
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
3. Formatted String Literals: f-strings
Formatted string literals (also called f-strings for short) let you include the value of Python expressions inside a string by prefixing the string with f
or F
and writing expressions as {expression}
.
>>> import math
>>> print(f'The value of pi is approximately {math.pi:.3f}.')
The value of pi is approximately 3.142.
>>> animals = 'eels'
>>> print(f'My hovercraft is full of {animals}.')
My hovercraft is full of eels.
>>> print(f'My hovercraft is full of {animals!r}.')
My hovercraft is full of 'eels'.
>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678}
>>> for name, phone in table.items():
... print(f'{name:10} ==> {phone:10d}')
...
Sjoerd ==> 4127
Jack ==> 4098
Dcab ==> 7678