Formatted string literals specificators
Теги:
После значения переменной в скобках может быть добвален знак :
для форматирвоания вывода.
!s
вызывает str()
, !r
- repr()
, и !a
вызывает ascii()
Чтобы отобразить как текст выражения, так и его значение после вычисления (полезно при отладке), после выражения можно добавить знак равенства =
(начиная с python3.8)
Пустое выражение недопустимо, а лямбда-функции и выражения присваивания :=
должны быть заключены в явные круглые скобки
Начиная с python3.8 доступны выражения с async
и await for
Пробелы внутри скобок сохраняются
Примеры
>>> 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'
>>> f"{today=:%B %d, %Y}" # using date format specifier and debugging
'today=January 27, 2017'
>>> number = 1024
>>> f"{number:#0x}" # using integer format specifier
'0x400'
>>> foo = "bar"
>>> f"{ foo = }" # preserves whitespace
" foo = 'bar'"
>>> line = "The mill's closed"
>>> f"{line = }"
'line = "The mill\'s closed"'
>>> f"{line = :20}"
"line = The mill's closed "
>>> f"{line = !r:20}"
'line = "The mill\'s closed" '
Недопустимо использование ковычек, совпадающих с внешними и экранирующих символов
f"abc {a["x"]} def" # error: outer string literal ended prematurely
f"abc {a['x']} def" # workaround: use different quoting
f"newline: {ord('\n')}" # raises SyntaxError
Чтобю включить обратную черту в подстановку, следует использовать временную переменную
>>> newline = ord('\n')
>>> f"newline: {newline}"
'newline: 10'
Наконец f-строки нельзя использовать в качестве строк документации, даже если в них нет переменных
Больше про форматирование строк, включая метод format()
смотри тут