f-строки в Python: форматирование, подстановки и лучшие практики
Если вы только начинаете или уже пишете на языке, умение эффективно использовать f-строки в Python быстро повышает читаемость кода. Это современный способ форматирования строк, появившийся в Python 3.6, который делает подстановки и форматирование интуитивными и быстрыми.
Что такое f-строки и как они работают
f-строка — это литерал строки с префиксом f, внутри которого можно вставлять выражения в фигурных скобках {}. Эти выражения вычисляются во время выполнения.
name = "Алиса"
age = 21
print(f"Привет, {name}! Тебе {age} года.")
# Привет, Алиса! Тебе 21 года.
Базовые подстановки и выражения
Внутри фигурных скобок можно писать не только имена переменных, но и любые выражения: вызовы функций, арифметику, тернарные операторы.
def tax(amount):
return amount * 0.13
price = 799.9
print(f"С налогом: {price + tax(price):.2f} ₽")
print(f"Дорого? {'да' if price > 500 else 'нет'}")
Debug-печать: оператор =
Начиная с Python 3.8, можно быстро выводить имя и значение переменной через синтаксис {expr=} — удобно для отладки.
user = {"name": "Алиса", "score": 1400}
print(f"{user['name']=}, {user['score']=}")
# user['name']='Алиса', user['score']=1400
Форматирование чисел: точность, разделители, знаки
После выражения можно указать формат-спецификатор через двоеточие :. Это те же спецификаторы, что и у метода format.
x = 12345.6789
print(f"Два знака после запятой: {x:.2f}") # 12345.68
print(f"Тысячный разделитель: {x:,.2f}") # 12,345.68 (в RU-локали может отличаться)
print(f"Фиксированная ширина: |{x:10.2f}|") # | 12345.68|
print(f"Выравнивание влево: |{x:<10.2f}|") # |12345.68 |
print(f"Выравнивание по центру: |{x:^10.2f}|") # | 12345.68 |
print(f"Знак всегда: {x:+.2f}, {-x:+.2f}") # +12345.68, -12345.68
print(f"Проценты: {(0.1234):.1%}") # 12.3%
Выравнивание и наполнение
Можно задавать символ заполнения и направление выравнивания. Формат: {значение:заполнительвыравниваниеширина}.
item = "CPU"
print(f"|{item:-^10}|") # |---CPU----|
print(f"|{item:.>10}|") # |.......CPU|
print(f"|{item:<10}|") # |CPU |
Форматирование дат и времени
Объекты datetime поддерживают собственный формат через strftime-подобный синтаксис в f-строках.
from datetime import datetime
now = datetime(2025, 1, 15, 14, 30)
print(f"Сегодня {now:%d.%m.%Y}, время {now:%H:%M}")
# Сегодня 15.01.2025, время 14:30
Многострочные f-строки и переносы
Можно использовать тройные кавычки или склеивать строки.
name, total, ok = "Алиса", 10, True
msg = f"""
Пользователь: {name}
Количество: {total}
Статус: {ok}
"""
print(msg)
Словари, атрибуты и подсказки по синтаксису
Внутри фигурных скобок можно обращаться к атрибутам и индексам. Если внутри нужны кавычки, следите за экранированием или используйте разные типы кавычек.
user = {"name": "Алиса", "city": "Казань"}
# Разные кавычки упрощают запись:
print(f"{user['name']} из {user['city']}")
class Point:
def __init__(self, x, y):
self.x, self.y = x, y
p = Point(3, 7)
print(f"({p.x}, {p.y})")
Экранирование фигурных скобок
Чтобы вывести сами фигурные скобки, удвойте их: {{ и }}.
template = "Шаблон: {{значение}}"
print(f"{template}") # Шаблон: {значение}
Производительность: f-строки быстрее
Часто f-строки быстрее старых способов форматирования.
import timeit
setup = "name='Алиса'; age=21"
print('f-string:', timeit.timeit("f'{name} {age}'", setup=setup, number=1_000_000))
print('format :', timeit.timeit("'{} {}'.format(name, age)", setup=setup, number=1_000_000))
print('% :', timeit.timeit("'%s %s' % (name, age)", setup=setup, number=1_000_000))
Типичные ошибки и подводные камни
- Нельзя писать комментарии внутри
{}и использовать символ обратной косой черты в выражении. - Следите за кавычками при доступе по ключу в словаре внутри
{}— используйте разные кавычки или экранирование. - Не перегружайте f-строку сложной логикой: лучше вычисляйте заранее, а в строку подставляйте итог.
- Функция в
{}выполнится на каждый форматируемый вызов: избегайте тяжёлых вычислений внутри. {expr=}доступно только в Python 3.8+.
Практические шаблоны
# 1) Читабельные отчёты
user, spent = "Алиса", 1234.5
print(f"Пользователь: {user}\nПотрачено: {spent:,.2f} ₽")
# 2) Колонки фиксированной ширины
rows = [("CPU", 85.2), ("RAM", 63.1), ("Disk", 91.7)]
for name, val in rows:
print(f"{name:<6} | {val:6.2f}%")
# 3) Журналирование с дебаг-синтаксисом
query, limit = "select * from t", 100
print(f"{query=}, {limit=}")
Лучшие практики
- Формат-спецификатор держите рядом с выражением:
{total:,.2f}— нагляднее, чем отдельные вызовыformat. - Для многострочных сообщений используйте тройные кавычки: так легче редактировать текст и переносы.
- Подготовьте данные заранее: сложные вычисления вне строки, простые подстановки — внутри.
- Старайтесь, чтобы одна f-строка передавала одну понятную мысль (логический блок).
Итог
f-строки в Python — быстрый и выразительный инструмент для форматирования вывода: числа, даты, выравнивание, отладка — всё под рукой. Освоив десяток приёмов, вы сделаете код короче и понятнее.
Хотите системно прокачать Python с практикой и обратной связью? Загляните в пошаговый курс «Python с Нуля до Гуру» — начать учиться сейчас.
-
Создано 19.12.2025 17:02:11
-
Михаил Русаков

Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.