f-строки в Python — форматирование строк для аналитика
Коротко
f-строка — строковый литерал с префиксом f, который подставляет значения переменных и выражений прямо в текст. Появились в Python 3.6 и стали стандартом форматирования. Аналитики используют f-строки для вывода метрик, логирования, формирования отчётов. На собеседованиях спрашивают синтаксис, форматирование чисел и подводные камни.
Синтаксис
name = 'Анна'
age = 28
f"Имя: {name}, возраст: {age}"
# 'Имя: Анна, возраст: 28'Всё, что внутри {} — выражение Python. Оно вычисляется в момент создания строки и подставляется в результат.
Выражения внутри {}
Внутри фигурных скобок можно писать любое выражение: арифметику, вызовы функций, методы, тернарный оператор.
revenue = 1_500_000
users = 4200
f"ARPU: {revenue / users:.2f} руб."
# 'ARPU: 357.14 руб.'
f"Пользователей: {users:,}".replace(',', ' ')
# 'Пользователей: 4 200'
status = 'active'
f"Статус: {status.upper()}"
# 'Статус: ACTIVE'
score = 0.82
f"Тест {'пройден' if score >= 0.8 else 'не пройден'}"
# 'Тест пройден'Форматирование чисел
Спецификация формата пишется после двоеточия внутри {}. Это самая полезная часть f-строк для аналитика.
conversion = 0.0347
revenue = 2_568_900.5
delta = -0.124
# Проценты
f"Конверсия: {conversion:.1%}"
# 'Конверсия: 3.5%'
# Два знака после запятой
f"Выручка: {revenue:,.2f}"
# 'Выручка: 2,568,900.50'
# Без дробной части с разделителем тысяч
f"Выручка: {revenue:,.0f} руб."
# 'Выручка: 2,568,900 руб.'
# Знак + для положительных и отрицательных
f"Изменение: {delta:+.1%}"
# 'Изменение: -12.4%'Основные спецификаторы: :.2f — два знака после точки, :,.0f — разделитель тысяч без дробной части, :.1% — проценты с одним знаком, :+ — всегда показывать знак.
Форматирование дат
from datetime import datetime
now = datetime(2026, 4, 9, 14, 30)
f"Отчёт за {now:%d.%m.%Y}"
# 'Отчёт за 09.04.2026'
f"Обновлено: {now:%Y-%m-%d %H:%M}"
# 'Обновлено: 2026-04-09 14:30'
f"Месяц: {now:%B %Y}"
# 'Месяц: April 2026'Форматные коды те же, что в strftime: %d — день, %m — месяц, %Y — год, %H:%M — часы и минуты.
Выравнивание и отступы
label = 'DAU'
value = 3200
f"{label:<10}: {value:>10,}"
# 'DAU : 3,200'
f"{label:*^20}"
# '********DAU*********'< — по левому краю, > — по правому, ^ — по центру. Число после символа — ширина поля. Символ перед <>^ — заполнитель (по умолчанию пробел).
Многострочные f-строки
metrics = {
'dau': 3200,
'revenue': 1_500_000,
'conversion': 0.035
}
report = (
f"DAU: {metrics['dau']:,}\n"
f"Выручка: {metrics['revenue']:,.0f} руб.\n"
f"Конверсия: {metrics['conversion']:.1%}"
)Каждая строка — отдельная f-строка. Python склеивает их автоматически, если они в скобках. Можно использовать тройные кавычки (f"""..."""), но следите за лишними отступами.
Отладка с f"{var=}"
С Python 3.8 можно писать = после выражения — строка покажет и имя, и значение. Удобно для дебага.
users = 4200
retention = 0.42
f"{users=}, {retention=:.1%}"
# "users=4200, retention=42.0%"f-string vs format() vs %
name = 'Анна'
score = 95.5
# f-строка — рекомендуемый способ
f"{name}: {score:.1f}"
# str.format()
"{}: {:.1f}".format(name, score)
# %-форматирование (устаревший)
"%s: %.1f" % (name, score)f-строка — самый читаемый и быстрый вариант. format() нужен, когда шаблон строки определяется динамически (приходит из конфига или базы). %-форматирование — легаси, в новом коде не используйте.
Примеры для аналитика
Формирование лог-сообщений:
user_id = 12345
event = 'purchase'
amount = 990
f"[{datetime.now():%H:%M:%S}] user={user_id} event={event} amount={amount}"
# '[14:30:05] user=12345 event=purchase amount=990'Динамические SQL-запросы — осторожно:
# ОПАСНО — SQL-инъекция!
table = "users"
query = f"SELECT * FROM {table} WHERE id = {user_id}"
# Так можно — только для имён таблиц/столбцов из доверенного источника
# Для значений всегда используйте параметризованные запросы:
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))Никогда не подставляйте пользовательский ввод в SQL через f-строки. Используйте параметризованные запросы или ORM.
Частые ошибки
Забытый префикс f. Самая коварная ошибка — строка выглядит как f-строка, но без f это просто текст с фигурными скобками:
name = 'Анна'
"{name}" # '{name}' — просто строка
f"{name}" # 'Анна' — f-строкаОбратный слэш внутри {}. В фигурных скобках нельзя использовать \. Вынесите в переменную:
# Ошибка в Python < 3.12 (в 3.12+ разрешено)
f"{'\\t'.join(items)}"
# Безопасный вариант для любой версии
sep = '\t'
f"{sep.join(items)}"Вопросы с собеседований
— Что такое f-строка в Python?
— Строковый литерал с префиксом f, который подставляет значения выражений из фигурных скобок. Появился в Python 3.6. Выражения вычисляются в рантайме.
— Как отформатировать число как проценты с двумя знаками?
— f"{value:.2%}". Спецификатор % умножает число на 100 и добавляет знак процента. .2 задаёт два знака после точки.
— Чем f-строка отличается от str.format()? — f-строка вычисляется сразу, выражения пишутся прямо внутри строки. format() принимает аргументы отдельно. f-строка быстрее и читаемее, но format() нужен, когда шаблон определяется динамически.
— Можно ли использовать f-строки для SQL-запросов?
— Технически да, но для подстановки значений — нельзя. Это прямой путь к SQL-инъекции. Для значений используйте параметризованные запросы (%s, $1), f-строки допустимы только для имён таблиц/столбцов из доверенного источника.
— Что делает = в f"{var=}"?
— Выводит имя переменной и её значение. x = 5; f"{x=}" даст 'x=5'. Работает с Python 3.8+. Удобно для отладки.
Потренировать Python-вопросы на практике можно в тренажёре Карьерника. Больше тем — в гайде по lambda. А ещё больше примеров вопросов — на отдельной странице.
Открыть тренажёр в Telegram — вопросы по Python, pandas, SQL и аналитике. Бесплатно.
FAQ
f-строки работают в Python 2?
Нет. f-строки появились в Python 3.6 (PEP 498). В Python 2 используйте format() или %-форматирование. Но в 2026 году Python 2 — не аргумент, переходите на 3.
Можно ли вложить f-строку в f-строку?
Да, с Python 3.12 это работает без ограничений. В более ранних версиях нужно чередовать типы кавычек: f"{''.join(f'{x}' for x in items)}". Но если вложенность мешает читать — вынесите в переменную.
Какой способ форматирования самый быстрый?
f-строка. Она компилируется в байткод напрямую, без вызова метода. format() и % медленнее, потому что вызывают методы строки. Разница заметна на миллионах итераций, но в аналитическом коде обычно не критична.