Тот формат, которым ты реально будешь пользоваться
f-строки — это способ по умолчанию, которым современный Python-код вставляет значения в текст. Поставь f перед открывающей кавычкой, и всё, что внутри {...}, превращается в живое выражение:
Три вещи, которые здесь стоит заметить. Префикс f превращает весь литерал в шаблон. Фигурные скобки — это точки подстановки. А выражение внутри скобок вычисляется в тот момент, когда выполняется print, а не когда строка была написана.
Ты будешь писать f-строки куда чаще любого другого стиля форматирования. Они короче, чем "Hello, " + name + ".", читаемее, чем "Hello, %s." % name, и гибче, чем .format().
Внутри может быть что угодно, что вычисляется
В скобки можно писать не только имена переменных. Подойдёт любое выражение Python:
Вызовы методов, индексирование, арифметика, условные выражения — всё сгодится. Единственное правило: держи то, что между скобками, коротким. Если внутри подстановки получается расчёт на три строки, сначала вычисли результат в переменную и подставь её имя.
Форматирование чисел
Двоеточие после выражения открывает спецификатор формата — мини-язык, управляющий отображением значения:
Коротко про каждый кусочек:
.2f— число с плавающей точкой, два знака после точки. Округляется при выводе.,— запятая как разделитель тысяч. Работает и для int, и для float..1%— умножает на 100 и добавляет%. Удобно для долей и коэффициентов..2e— научная запись с двумя знаками после точки.
Их можно комбинировать. f"{total:,.2f}" даст "1,234.57".
Заполнение, ширина и выравнивание
Для аккуратного вывода в колонки:
<10 означает «выравнивание по началу строки, дополнить до 10 символов». >5 — «выравнивание по концу строки, дополнить до 5». Для центрирования используется ^.
Чтобы заполнять не пробелами, а чем-то другим, поставь символ-заполнитель перед флагом выравнивания:
Форматирование дат
Тот же синтаксис {value:spec} работает и для объектов datetime:
Спецификация после двоеточия — это строка формата strftime. Любой %-код, который принимает strftime, тут тоже работает — подробно мы разберём их на странице про datetime.
Трюк с = для отладки
Одна из самых полезных малозаметных фишек: поставь = после выражения, и Python выведет и текст выражения, и его значение:
Получаешь count=7, price=19.99, count * price=139.93. Это полный эквивалент print("count =", count) в три символа. Запомни на случай, когда захочется по-быстрому выкинуть пару значений в лог при отладке.
Экранирование фигурных скобок
Если нужен литеральный { или } в выводе, удваивай их:
Одинарные скобки открывают выражение; {{ и }} — это { и } в выводе.
Многострочные f-строки
f-строки прекрасно дружат с тройными кавычками — это удобно, когда нужно собрать небольшой шаблон прямо в коде:
Длинную f-строку можно разбить на несколько соседних строковых литералов — Python склеит их автоматически:
Где тебе ещё встретятся старые стили
В существующем коде ты наткнёшься на два более старых стиля форматирования:
Все три дают одинаковый результат. В девяти случаях из десяти f-строки выигрывают по читаемости. К .format() стоит обращаться, когда нужно один раз построить шаблон и многократно его применять; % используй только если поддерживаешь старый код, где он уже есть.
Для чего f-строки не годятся
Две ситуации просят другого инструмента.
Сборка SQL-запросов. Никогда не вставляй пользовательский ввод в SQL-строку через f-строку. Используй параметризованные запросы из библиотеки базы данных. f-строка здесь — прямой путь к SQL-инъекции.
Сборка переводимого UI-текста. Если твоё приложение поддерживает несколько языков, нужен шаблон, который смогут подхватить внешние инструменты перевода — обычно это _(...) из gettext или фреймворковый хелпер. f-строка запекает структуру в исходнике, что сильно усложняет перевод.
Для всего остального — логов, вывода в консоль, сборки URL, строк конфигурации, форматирования чисел для вывода — f-строки именно то, что нужно.
Дальше: числа и булевы значения
f-строки много работают с числами, так что стоит чуть глубже разобраться с числовыми типами. Об этом — на следующей странице.
Часто задаваемые вопросы
Что такое f-строка в Python?
f-строка — это строковый литерал с префиксом f, в котором всё, что заключено в {...}, заменяется во время выполнения значением выражения. f"Привет, {name}" подставляет текущее значение name в строку.
Когда f-строки появились в Python?
В Python 3.6. Все современные версии Python их поддерживают, так что ты смело можешь использовать f-строки в любом коде на Python 3. Старые стили форматирования (% и .format()) всё ещё работают, но в большинстве случаев читаются хуже.
Как отформатировать число до двух знаков после запятой в Python?
Используй спецификатор формата после двоеточия внутри скобок: f"{price:.2f}". .2f означает «число с плавающей точкой, два знака после запятой». Это влияет только на отображение; само число не меняется.
Можно ли помещать внутрь f-строки любое выражение?
Да — арифметику, вызовы методов, вызовы функций, условные выражения. И f"{name.upper()}", и f"{price * 1.2:.2f}" работают как надо. Держи выражения короткими; если внутри скобок становится громоздко, сначала вычисли значение в переменную.