str.format и f-strings: форматировать значения в строку

Python обеспечивает интерполяцию строки и функциональность форматирования через str.format функции, введенной в версии 2.6 и F-строк , введенных в версии 3.6.

Даны следующие переменные:

 i = 10
f = 1.5
s = "foo"
l = ['a', 1, 2]
d = {'a': 1, 2: 'foo'}

 

Следующие утверждения все эквивалентны

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

 

Для справки, Python также поддерживает классификаторы в стиле C для форматирования строк. Примеры , приведенные ниже, эквивалентны тем , которые выше, но str.format вариантов являются предпочтительными из - за преимущества в гибкости, последовательности обозначений и расширяемости:

 "%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)

 

Скобки используются для интерполяции в str.format также может быть пронумерована для уменьшения дублирования при форматировании строк. Например, следующее эквивалентно:

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

 

В то время как официальная документация питона, как обычно, достаточно тщательно, pyformat.info имеет большой набор примеров с подробными объяснениями.

Кроме того, { и } символы могут быть экранированы с помощью двойных скобок:

 "{'a': 5, 'b': 6}"
 



 >>> "{{'{}': {}, '{}': {}}}".format("a", 5, "b", 6)

>>> f"{{'{'a'}': {5}, '{'b'}': {6}}"

 

См Строка форматирования для получения дополнительной информации. str.format() был предложен в PEP 3101 и F-строк в PEP 498 .