Форматные строки (f-string)
Форматированные строковые литералы также известны как f-строки или форматные строки.
Форматированные строковые литералы — это литералы-строки с префиксом
Такие строки могут содержать маркеры для замещения (выражения в фигурных скобах —
Часть строки вне фигурных скобок остаётся неизменной (за исключением двойных фигурных скобок
Общий вид маркера:
Маркеры могут включать в себя другие маркеры.
Выражения внури скобок обрабатываются как обычные выражения с несколькими оговорками:
Далее преобразование использует мини-язык форматирования по методу format(). Настройки формата передаются в метод __format__() (если они не указаны, передаётся пустая строка).
После этого маркер в строке заменяется отформатированным результатом вычисления выражения.
Если затребовано преобразование, оно будет выполнено над результатом вычисления выражения непосредственно перед форматированием.
Начиная с +py3.8 можно использовать форму
f
или F
. animal = 'кот'
age = 7
f'У меня есть {animal}. Ему {age+1}.' # У меня есть кот. Ему 8.
def print_me(one, two):
print(f'Вот тебе {one}, а вот тебе {two}.')
Такие строки могут содержать маркеры для замещения (выражения в фигурных скобах —
{}
). В то время как обычные литералы представляют собой константы, значение форматированных строк вычисляются в ходе исполнения программы.Часть строки вне фигурных скобок остаётся неизменной (за исключением двойных фигурных скобок
{{
или }}
, которые заменяются на одиночные). Одиночная открывающая скобка {
сигнализирует о начале маркера замены (выражения на Питоне), после которого могут следовать указатель преобразования (начинается с восклицательного знака !
), а также указатель формата (начинается с двоеточия :
). Маркер завершается фигурной закрывающей скобкой }
.Внимание
Попытка использования обратных косых черт (слешей) в форматной строке (например,
\n
) приведёт к исключению SyntaxError.Общий вид маркера:
{(выражение)[!преобразование][:формат]}
.Маркеры могут включать в себя другие маркеры.
Выражения внури скобок обрабатываются как обычные выражения с несколькими оговорками:
- Пустые выражения недопустимы;
- Лямбда-выражения должны быть окружены скобками;
- Допускаются переносы строк (например, в литералах с тройными кавычками), однако комментарии не поддерживаются;
- Каждое выражение вычисляется в том же контексте, в котором содержится форматная строка, слева направо.
Далее преобразование использует мини-язык форматирования по методу format(). Настройки формата передаются в метод __format__() (если они не указаны, передаётся пустая строка).
animal = 'cat'
f"{animal:>6}" # ' cat'
После этого маркер в строке заменяется отформатированным результатом вычисления выражения.
Внимание
Форматные строки можно склеивать, однако маркеры при этом не должны принадлежать разным литералам.
Преобразование
Если затребовано преобразование, оно будет выполнено над результатом вычисления выражения непосредственно перед форматированием.
animal = 'cat'
f'I have a {animal!r}.' # I have a 'cat'.
f'I have a {repr(animal)}.' # I have a 'cat'.
# Вложенные маркеры:
width = 10
precision = 4
value = decimal.Decimal('12.34567')
f'result: {value:{width}.{precision}}' # result: 12.35
Упрощение для отладки
Начиная с +py3.8 можно использовать форму
f'{my_var =}'
, чтобы вывести название переменной и её текущее значение. my_var = 'cat'
print(f'{my_var=}') # my_var = 'cat'
# Имеется возможность дополнения строки до указанной длины:
print(f'{my_var.upper() = :a^7}') # my_var = 'aaCATaa'
print(f'{my_var.upper() = :b>7}') # my_var = 'bbbbCAT'
Синонимы поиска: Форматные строки (f-string), f-string, f-строки
В разделе «str (строка)»:
str.capitalize
str.casefold
str.center
str.count
str.decode
str.encode
str.endswith
str.expandtabs
str.find
str.format
str.format_map
str.index
str.isalnum
str.isalpha
str.isascii
str.isdecimal
str.isdigit
str.isidentifier
str.islower
str.isnumeric
str.isprintable
str.isspace
str.istitle
str.isupper
str.join
str.ljust
str.lower
str.lstrip
str.maketrans
str.partition
str.replace
str.rfind
str.rindex
str.rjust
str.rpartition
str.rsplit
str.rstrip
str.split
str.splitlines
str.startswith
str.strip
str.swapcase
str.title
str.translate
str.upper
str.zfill
Форматирование при помощи %
На заметку
У нас есть новостная группа в Telegram. Там же можно обсудить интересующие вопросы. Ссылка в самом низу страницы.