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+ вопросами для аналитиков.