f-строки в Python: форматирование, подстановки и лучшие практики

f-строки в Python: форматирование, подстановки и лучшие практики

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 с Нуля до Гуру» — начать учиться сейчас.

    Источник

    НЕТ КОММЕНТАРИЕВ

    Оставить комментарий