Какие знаешь способы форматирования строк в Python?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Способы форматирования строк в 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 — они самые быстрые, самые читаемые и удобные в использовании.