← Назад к вопросам

Какие знаешь способы форматирования строк в Python?

1.3 Junior🔥 191 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Способы форматирования строк в Python

В Python существует несколько основных подходов к форматированию строк, каждый с собственными преимуществами и случаями применения.

1. Оператор % (старый стиль)

Это самый старый способ форматирования, унаследованный из C:

name = "Alice"
age = 30
print("Имя: %s, возраст: %d" % (name, age))
# Выведет: Имя: Alice, возраст: 30

# Со словарем
user = {"name": "Bob", "age": 25}
print("Имя: %(name)s, возраст: %(age)d" % user)
# Выведет: Имя: Bob, возраст: 25

Плюсы: работает в старых версиях Python Минусы: менее читаемо, легко допустить ошибку в типах

2. Метод str.format()

Опубликован в Python 2.6 как альтернатива оператору %:

name = "Alice"
age = 30
print("Имя: {}, возраст: {}".format(name, age))
# Выведет: Имя: Alice, возраст: 30

# С именованными параметрами
print("Имя: {name}, возраст: {age}".format(name="Bob", age=25))
# Выведет: Имя: Bob, возраст: 25

# Форматирование чисел
pi = 3.14159
print("Пи: {:.2f}".format(pi))
# Выведет: Пи: 3.14

# Индексы и индексирование
data = ["Alice", "Bob", "Charlie"]
print("{0} и {1} и {2}".format(*data))
# Выведет: Alice и Bob и Charlie

Плюсы: более читаемо, чем %, поддерживает именованные параметры Минусы: более многословно, чем f-strings

3. F-strings (форматированные строковые литералы, Python 3.6+)

Самый современный и удобный способ:

name = "Alice"
age = 30
print(f"Имя: {name}, возраст: {age}")
# Выведет: Имя: Alice, возраст: 30

# Встроенные выражения
x = 10
y = 20
print(f"Результат: {x + y}")
# Выведет: Результат: 30

# Форматирование чисел
pi = 3.14159
print(f"Пи: {pi:.2f}")
# Выведет: Пи: 3.14

# Форматирование с условиями
status = "активен"
count = 5
print(f"Статус: {status}, элементов: {count:03d}")
# Выведет: Статус: активен, элементов: 005

# Отладка (Python 3.8+)
print(f"{name = }")  # Выведет: name = Alice
print(f"{x + y = }")  # Выведет: x + y = 30

Плюсы: самый быстрый и читаемый способ, поддерживает сложные выражения Минусы: требует Python 3.6+

4. Шаблонные строки (Template strings)

Используется для простого, безопасного форматирования:

from string import Template

template = Template("Имя: $name, возраст: $age")
result = template.substitute(name="Alice", age=30)
print(result)
# Выведет: Имя: Alice, возраст: 30

# Использование словаря
user = {"name": "Bob", "age": 25}
result = template.substitute(user)
print(result)
# Выведет: Имя: Bob, возраст: 25

# safe_substitute не выбросит исключение если ключ отсутствует
partial = {"name": "Charlie"}
result = template.safe_substitute(partial)
print(result)
# Выведет: Имя: Charlie, возраст: $age

Плюсы: безопасно для пользовательского ввода, простой синтаксис Минусы: менее функционально, чем другие способы

5. Спецификаторы формата

Употребляются со всеми методами форматирования (%, format(), f-strings):

# Целые числа
num = 42
print(f"{num:d}")      # 42
print(f"{num:05d}")    # 00042
print(f"{num:b}")      # 101010 (двоичная)
print(f"{num:x}")      # 2a (шестнадцатеричная)
print(f"{num:o}")      # 52 (восьмеричная)

# Вещественные числа
float_num = 3.14159
print(f"{float_num:.2f}")   # 3.14
print(f"{float_num:e}")     # 3.141590e+00 (научная нотация)
print(f"{float_num:g}")     # 3.14159 (общий формат)

# Выравнивание
text = "hello"
print(f"{text:<10}")  # hello     (влево, ширина 10)
print(f"{text:>10}")  # hello     (вправо)
print(f"{text:^10}")  #   hello   (по центру)

# Знак
pos = 42
neg = -42
print(f"{pos:+d}")     # +42
print(f"{neg:+d}")     # -42

# Разделители тысяч
big_num = 1000000
print(f"{big_num:,}")  # 1,000,000
print(f"{big_num:_}")  # 1_000_000

Сравнение способов:

СпособЧитаемостьПроизводительностьPython версияИспользование
%НизкаяВысокая2.x+Наследие
str.format()СредняяСредняя2.6+Универсальное
f-stringsВысокаяВысокая3.6+Рекомендуется
TemplateСредняяНизкая2.x+Пользовательский ввод

Рекомендация:

Для современного Python кода (3.6+) используйте f-strings — они самые быстрые, самые читаемые и удобные в использовании.