Python provides string interpolation and formatting functionality through the str.format
function, introduced in version 2.6 and f-strings introduced in version 3.6.
Given the following variables:
i = 10
f = 1.5
s = "foo"
l = ['a', 1, 2]
d = {'a': 1, 2: 'foo'}
The following statements are all equivalent
"10 1.5 foo ['a', 1, 2] {'a': 1, 2: 'foo'}"
>>> "{} {} {} {} {}".format(i, f, s, l, d)
>>> str.format("{} {} {} {} {}", i, f, s, l, d)
>>> "{0} {1} {2} {3} {4}".format(i, f, s, l, d)
>>> "{0:d} {1:0.1f} {2} {3!r} {4!r}".format(i, f, s, l, d)
>>> "{i:d} {f:0.1f} {s} {l!r} {d!r}".format(i=i, f=f, s=s, l=l, d=d)
>>> f"{i} {f} {s} {l} {d}"
>>> f"{i:d} {f:0.1f} {s} {l!r} {d!r}"
For reference, Python also supports C-style qualifiers for string formatting. The examples below are equivalent to those above, but the str.format
versions are preferred due to benefits in flexibility, consistency of notation, and extensibility:
"%d %0.1f %s %r %r" % (i, f, s, l, d)
"%(i)d %(f)0.1f %(s)s %(l)r %(d)r" % dict(i=i, f=f, s=s, l=l, d=d)
The braces uses for interpolation in str.format
can also be numbered to reduce duplication when formatting strings. For example, the following are equivalent:
"I am from Australia. I love cupcakes from Australia!"
>>> "I am from {}. I love cupcakes from {}!".format("Australia", "Australia")
>>> "I am from {0}. I love cupcakes from {0}!".format("Australia")
While the official python documentation is, as usual, thorough enough, pyformat.info has a great set of examples with detailed explanations.
Additionally, the {
and }
characters can be escaped by using double brackets:
"{'a': 5, 'b': 6}"
>>> "{{'{}': {}, '{}': {}}}".format("a", 5, "b", 6)
>>> f"{{'{'a'}': {5}, '{'b'}': {6}}"
See String Formatting for additional information. str.format()
was proposed in PEP 3101 and f-strings in PEP 498.