F-string в Python: шпаргалка
Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.
Синтаксис
name = "Alice"
age = 30
print(f"{name} is {age} years old.")
# Alice is 30 years old.Префикс f перед строкой превращает её в f-string. Выражения внутри {} вычисляются.
1. Округление чисел
price = 1234.5678
f"{price:.2f}" # '1234.57' (2 знака после запятой)
f"{price:.0f}" # '1235' (без дробной)
f"{price:.4f}" # '1234.5678'2. Разделители тысяч
revenue = 1_234_567.89
f"{revenue:,.2f}" # '1,234,567.89' (запятые, англ)
f"{revenue:_.2f}" # '1_234_567.89' (подчёркивания)Для русского стандарта (пробел):
f"{revenue:,.0f}".replace(",", " ") # '1 234 568'3. Проценты
ctr = 0.0237
f"{ctr:.2%}" # '2.37%'
f"{ctr:.1%}" # '2.4%'
f"{ctr * 100:.2f}%" # '2.37%' (альтернатива)4. Ведущие нули
day = 5
f"{day:02d}" # '05'
f"{day:04d}" # '0005'5. Выравнивание
name = "Alice"
f"{name:>10}" # ' Alice' (вправо)
f"{name:<10}" # 'Alice ' (влево)
f"{name:^10}" # ' Alice ' (по центру)
f"{name:*^10}" # '**Alice***' (выравнивание + заполнитель)6. Форматирование дат
from datetime import datetime
now = datetime(2026, 4, 21, 10, 30, 0)
f"{now:%Y-%m-%d}" # '2026-04-21'
f"{now:%d.%m.%Y}" # '21.04.2026'
f"{now:%Y-%m-%d %H:%M}" # '2026-04-21 10:30'
f"{now:%A}" # 'Tuesday'
f"{now:%B}" # 'April'7. Экспоненциальная запись
x = 1234567890
f"{x:.2e}" # '1.23e+09'
f"{x:.3e}" # '1.235e+09'8. Двоичный, HEX, Octal
n = 255
f"{n:b}" # '11111111'
f"{n:08b}" # '11111111' (8 битов с ведущими нулями)
f"{n:x}" # 'ff'
f"{n:X}" # 'FF'
f"{n:o}" # '377'
f"{n:#x}" # '0xff' (с префиксом)9. Знак числа
profit = 150
f"{profit:+}" # '+150' (всегда со знаком)
f"{profit:-}" # '150' (только минус, по умолчанию)
f"{profit: }" # ' 150' (пробел вместо плюса)10. Выражения внутри f-string
a = 5
b = 10
f"Сумма: {a + b}" # 'Сумма: 15'
f"Среднее: {(a + b) / 2:.1f}" # 'Среднее: 7.5'
f"Верх: {max(a, b)}" # 'Верх: 10'11. Методы и атрибуты
name = "alice"
f"Привет, {name.capitalize()}" # 'Привет, Alice'
f"{name.upper()}" # 'ALICE'
f"Длина: {len(name)}" # 'Длина: 5'12. Словари и списки
user = {"name": "Alice", "age": 30}
f"Имя: {user['name']}, возраст: {user['age']}"
# Имя: Alice, возраст: 30
items = [10, 20, 30]
f"Первый: {items[0]}, всего: {sum(items)}"13. Self-documenting f-string (отладка)
Python 3.8+:
x = 42
price = 1234.56
f"{x=}" # 'x=42'
f"{price=:.2f}" # 'price=1234.56'Удобно для debug:
print(f"{df.shape=}")
print(f"{df.columns.tolist()=}")14. Многострочные f-string
name = "Alice"
report = f"""
Отчёт по пользователю: {name}
===============================
Возраст: {age}
Статус: {'премиум' if is_premium else 'free'}
"""15. Комбинация с форматом
value = 0.9876
f"{value:>15,.2%}" # ' 98.76%' (ширина 15, выравн. вправо, проценты)Частые ошибки
Забыли f
name = "Alice"
print("Hello, {name}") # 'Hello, {name}' — не подставится
print(f"Hello, {name}") # 'Hello, Alice'Кавычки внутри
# ошибка
f"User is {users['name']}" -- в Python 3.11+ работает, раньше — ошибка
# безопасно
f"User is {users[\"name\"]}"
# или
n = users['name']
f"User is {n}"Обратный слеш нельзя внутри выражения
# ошибка
f"{'\\n'}"
# работает
nl = '\n'
f"{nl}"Забытый :
# ошибка: не форматирует, просто подставит 0.987
f"{value.2%}"
# правильно
f"{value:.2%}"Производительность
- f-string быстрее
.format()и%-форматирования - Форматирование вычисляется на runtime — не используйте в горячем цикле для миллионов элементов, если строка не нужна
Сравнение с альтернативами
| Способ | Пример | Когда |
|---|---|---|
| f-string | f"{x}" |
всегда, если Python 3.6+ |
| .format() | "{}".format(x) |
старый код, шаблоны |
| %-formatting | "%d" % x |
очень старый код |
| Template | Template("$x").substitute(x=5) |
пользовательский ввод (безопасность) |
Правило: в 99% случаев — f-string.
Связанные темы
FAQ
Что такое f-string?
Форматированная строковая литерала — специальный синтаксис в Python для подстановки переменных в строку с форматированием.
С какой версии Python работает?
Python 3.6+.
Можно ли форматировать numpy/pandas значения?
Да, f-string работает с любым объектом, у которого есть __format__ или __str__.
Что лучше: f-string или .format()?
f-string — короче, быстрее, читаемее. Используйте его, если нет причин иначе.
Как вывести фигурные скобки?
Удвоить: f"{{literal}}" → {literal}.
Тренируйте Python для собесов — откройте тренажёр с 1500+ вопросами для аналитиков.