Форматирование: f-строки, format(), %

Форматирование: f-строки, format(), %

Вставить значение переменной в текст — одна из самых частых операций в программировании. Python предоставляет три способа форматирования строк. Вы уже знакомы с f-строками из модуля 1; теперь изучим все три подхода, их особенности и спецификаторы формата.

Три способа форматирования

name = "Алиса"
age = 25

# 1. F-строки (Python 3.6+) — современный способ:
print(f"Привет, {name}! Тебе {age} лет.")

# 2. str.format() — классический способ:
print("Привет, {}! Тебе {} лет.".format(name, age))

# 3. % — старый стиль (не рекомендуется в новом коде):
print("Привет, %s! Тебе %d лет." % (name, age))

Все три дают одинаковый результат. Рекомендация: используйте f-строки в новом коде — они читабельнее и быстрее.

F-строки: возможности

F-строка — строка с префиксом f. Внутри {} можно помещать любое Python-выражение:

x = 10
y = 3

print(f"Сумма: {x + y}")         # Сумма: 13
print(f"Частное: {x / y:.2f}")   # Частное: 3.33
print(f"Квадрат: {x ** 2}")      # Квадрат: 100
print(f"Тип: {type(x).__name__}") # Тип: int

items = ["яблоко", "банан"]
print(f"Элементов: {len(items)}") # Элементов: 2

Спецификаторы формата в f-строках

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

Числа:

pi = 3.14159265

print(f"{pi:.2f}")      # 3.14 — 2 знака после точки
print(f"{pi:.4f}")      # 3.1416 — 4 знака
print(f"{pi:10.2f}")    # '      3.14' — ширина поля 10, выравнивание вправо
print(f"{pi:<10.2f}")   # '3.14      ' — выравнивание влево
print(f"{pi:^10.2f}")   # '   3.14   ' — по центру

n = 1234567
print(f"{n:,}")         # 1,234,567 — разделитель тысяч
print(f"{n:_}")         # 1_234_567 — через подчёркивание
print(f"{n:010}")       # 0001234567 — дополнить нулями до 10 символов

Целые числа в разных системах счисления:

n = 255
print(f"{n:d}")     # 255 — десятичное
print(f"{n:b}")     # 11111111 — двоичное
print(f"{n:o}")     # 377 — восьмеричное
print(f"{n:x}")     # ff — шестнадцатеричное
print(f"{n:#x}")    # 0xff — с префиксом

Строки:

s = "hello"
print(f"{s:>10}")    # '     hello' — вправо
print(f"{s:<10}")    # 'hello     ' — влево
print(f"{s:^10}")    # '  hello   ' — по центру
print(f"{s:*^10}")   # '**hello***' — заполнитель *

Отладочный режим f-строк: =

Добавление = внутри {} выводит и имя переменной, и её значение — удобно при отладке:

x = 42
name = "Алиса"

print(f"{x=}")       # x=42
print(f"{name=}")    # name='Алиса'
print(f"{x + 1=}")   # x + 1=43

Это Python 3.8+. Очень удобно вместо print(f"x = {x}").

str.format(): именованные аргументы

format() позволяет ссылаться на аргументы по позиции или имени:

# По позиции:
print("Имя: {0}, Возраст: {1}".format("Алиса", 25))
print("Имя: {1}, Снова имя: {0}".format("Алиса", "Борис"))   # порядок свой

# По имени:
print("Привет, {name}! Тебе {age} лет.".format(name="Алиса", age=25))

# Спецификаторы работают так же:
print("{:.2f}".format(3.14159))   # 3.14
print("{:>10}".format("hello"))   # '     hello'

format() полезен, когда шаблон хранится отдельно от данных:

template = "Дорогой(ая) {name}, Ваш заказ #{order_id} доставлен."
message = template.format(name="Алиса", order_id=12345)
print(message)

% форматирование: старый стиль

Этот стиль унаследован из C/Python 2. Основные спецификаторы:

name = "Алиса"
age = 25
score = 95.5

print("Имя: %s" % name)             # строка
print("Возраст: %d" % age)          # целое
print("Балл: %.1f" % score)         # дробное с 1 знаком

print("Имя: %s, возраст: %d" % (name, age))   # несколько значений — кортеж

Спецификаторы %:

  • %s — строка (любой тип через str())
  • %d — целое число
  • %f — дробное число
  • %r — repr (для отладки)
  • %.2f — дробное с 2 знаками

Не используйте % в новом коде — только для понимания чужого кода.

Практический пример: форматированная таблица

headers = ["Имя", "Оценка", "Статус"]
data = [
    ("Алиса", 92, "сдала"),
    ("Борис", 55, "не сдал"),
    ("Вера", 78, "сдала"),
]

print(f"{'Имя':<12} {'Оценка':>8} {'Статус':<10}")
print("-" * 32)
for name, score, status in data:
    print(f"{name:<12} {score:>8} {status:<10}")

Вывод:

Имя            Оценка Статус
--------------------------------
Алиса              92 сдала
Борис              55 не сдал
Вера               78 сдала

Проверь себя

Что выведет следующий код?

n = 42
print(f"{'0' * (5 - len(str(n)))}{n}")

len(str(42)) = 2. 5 - 2 = 3. '0' * 3 = '000'. Конкатенация: '000' + '42' = '00042'. То же можно сделать через f"{n:05d}".

Итог

  • F-строки (f"...") — современный способ форматирования; поддерживают любые выражения.
  • Спецификатор формата: {значение:спецификатор}:.2f (точность), :10 (ширина), :< / :> / :^ (выравнивание).
  • {x=} в f-строке (Python 3.8+) — отладочный вывод: x=42.
  • str.format() — именованные шаблоны; хорош для отделения шаблона от данных.
  • % форматирование — устаревший стиль; только для чтения старого кода.

В следующем уроке разберём методы для изменения регистра и проверки свойств строк: isdigit, startswith, upper и другие.

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике