f‑строки: форматируем вывод просто и читаемо — примеры и частые ошибки

f‑строки (форматированные строковые литералы) — один из самых удобных способов подставлять значения в текст в Python. Они появились в версии 3.6 и стали стандартом де‑факто для форматирования вывода: код становится короче и понятнее по сравнению с %-форматированием или методом .format(). В этой статье разберём, как правильно использовать f‑строки, какие возможности у них есть и какие ошибки чаще всего допускают. Всё — с примерами и практическими рекомендациями.


Что такое f‑строка и как её создать

f‑строка — это обычная строка с префиксом f (или F), внутри которой можно вставлять выражения в фигурных скобках {}.

python
name = "Анна"
age = 27
message = f"Меня зовут {name}, мне {age} лет."
print(message)
# Меня зовут Анна, мне 27 лет.

Префикс обязателен: без него Python воспримет {name} как обычный текст.

python
message = "Меня зовут {name}"  # просто строка, подстановки не будет

Возможности внутри фигурных скобок

В {...} можно писать не только имена переменных, но и любые выражения.

Вычисления

python
price = 199.9
discount = 0.1
final = f"Цена со скидкой: {price * (1 - discount):.2f} руб."
print(final)
# Цена со скидкой: 179.91 руб.

Доступ к элементам и атрибутам

python
user = {"name": "Борис", "role": "admin"}
msg = f"Пользователь: {user['name']}, роль: {user['role']}"
 
class Person:
    def __init__(self, name):
        self.name = name
 
p = Person("Мария")
msg2 = f"Имя: {p.name}"

Вызовы функций

python
def get_status(is_active):
    return "активен" if is_active else "неактивен"
 
is_active = True
msg = f"Статус: {get_status(is_active)}"

Форматирование чисел и дат

После выражения можно добавить спецификатор формата через двоеточие: {выражение:спецификатор}.

Числа: точность, выравнивание, разделители

python
value = 1234567.8912
 
# Фиксированное количество знаков после запятой
f"{value:.2f}"          # 1234567.89
 
# С разделителями тысяч (Python 3.6+)
f"{value:,.2f}"         # 1,234,567.89
 
# Выравнивание по ширине
f"{value:>15.2f}"       # справа, ширина 15 символов
f"{value:<15.2f}"       # слева
f"{value:^15.2f}"       # по центру

Проценты

python
ratio = 0.378
f"{ratio:.1%}"          # 37.8%

Даты

python
from datetime import datetime
now = datetime.now()
 
# Стандартный формат
f"{now:%Y-%m-%d %H:%M}"        # 2026-07-31 14:22
 
# Любой свой формат
f"{now:%d.%m.%Y}"              # 31.07.2026

Многострочные f‑строки

Для длинных текстов удобно использовать тройные кавычки:

python
report = f"""
Отчёт за {now:%Y-%m-%d}
-----------------------
Пользователь: {user["name"]}
Статус: {get_status(is_active)}
Баланс: {value:,.2f}
"""
print(report)

Важно: префикс f ставится один раз перед открывающими тройными кавычками.

Пример использования:

python

from datetime import datetime
 
def get_status(is_active: bool) -> str:
    return "Активен" if is_active else "Заблокирован"
 
# Данные для отчёта
now = datetime.now()
user = {"name": "Иван Иванов"}
is_active = True
value = 1234567.89
 
# Многострочная f‑строка с тройными кавычками
report = f"""
Отчёт за {now:%Y-%m-%d}
-----------------------
Пользователь: {user["name"]}
Статус: {get_status(is_active)}
Баланс: {value:,.2f}
"""
 
print(report)


Вложенные фигурные скобки и экранирование

Если нужно вывести сами символы { и }, их экранируют удвоением:

python
template = f"JSON-шаблон: {{\"name\": \"{name}\"}}"
print(template)
# JSON-шаблон: {"name": "Анна"}

Правило:

  • {{{
  • }}}

Выражение внутри не должно содержать несбалансированных скобок.


Частые ошибки и как их избежать

1. Забыли префикс f

python
name = "Анна"
msg = "{name}"          # ошибка логики: будет выведено "{name}"
msg = f"{name}"          # правильно

2. Синтаксис внутри скобок

Нельзя писать произвольный код: только выражения, а не операторы.

python
# Нельзя:
# f"Результат: {if x > 0: x else 0}"   # SyntaxError
 
# Можно (тернарный оператор):
f"Результат: {x if x > 0 else 0}"

3. Неправильный спецификатор формата

python
x = "текст"
# f"{x:.2f}"  # TypeError: не может форматировать строку как float

Всегда проверяйте, что тип значения соответствует спецификатору.

4. Проблемы с кодировкой и спецсимволами

Внутри f‑строк работают обычные правила экранирования строк: \n, \t и т. д.

python
f"Строка 1\nСтрока 2"

Это не особенность f‑строк, но легко забыть при переносах строк в тройных кавычках.

5. Попытка использовать f‑строку в старых версиях Python

f‑строки работают начиная с Python 3.6. Если проект на 3.5 и ниже, они вызовут SyntaxError. В таких случаях используют .format() или %.


Практические примеры

Пример 1: простой отчёт по заказу

python
order_id = 1024
items = ["ноутбук", "мышь", "кабель"]
total = 45990.5
 
report = f"""
Заказ №{order_id}
Товары: {", ".join(items)}
Итого: {total:,.2f} руб.
"""
print(report)

Здесь:

  • подстановка переменной,
  • вызов метода .join() внутри {},
  • форматирование числа с разделителями и двумя знаками после запятой.

Пример 2: логирование с датой и уровнем

python
import logging
from datetime import datetime
 
now = datetime.now()
level = "ERROR"
message = "Не удалось подключиться к базе данных"
 
log_line = f"[{now:%Y-%m-%d %H:%M:%S}] [{level}] {message}"
logging.info(log_line)

Пример 3: формирование SQL‑запроса (только для демонстрации синтаксиса)

Важно: никогда не подставляйте пользовательский ввод напрямую в SQL через f‑строки — это уязвимость SQL‑инъекций. Ниже — пример только для синтаксиса f‑строк:

python
table = "users"
column = "email"
value = "anna@example.com"
 
# НЕБЕЗОПАСНО, не используйте так в реальном коде
query = f"SELECT * FROM {table} WHERE {column} = '{value}'"

Для реальных запросов всегда используйте параметризированные запросы (библиотеки sqlite3, psycopg2, SQLAlchemy и т. п.).


Сравнение с альтернативами

Способ Пример Когда уместен
f‑строки f"Привет, {name}" Почти всегда в современном Python
.format() "Привет, {}".format(name) Если нужна совместимость с Python < 3.6 или специфическая логика шаблонов
%‑форматирование "Привет, %s" % name Устаревший стиль; встречается в старом коде и логах

Для новых проектов предпочтительны f‑строки.


Шпаргалка по форматам

  • :.2f — число с двумя знаками после запятой.
  • :,.2f — то же, плюс разделители тысяч.
  • :.1% — процент с одним знаком.
  • :%Y-%m-%d — дата в формате ISO.
  • :>10 — выравнивание вправо, ширина 10 символов.
  • :<10 — влево.
  • :^10 — по центру.

Добавить комментарий