📜 Классический подход из занятия
C-style форматирование до сих пор встречается в старых проектах и библиотеках. Оно требует строгого соответствия типов спецификаторов.
1. Простая строка
📄 examples/classic_format.py
name = "Alice"
age = 30
print("My name is %s and I am %d years old." % (name, age))
2. Форматирование float
📄 examples/classic_float.py
pi = 3.14159
print("Pi ≈ %.2f" % pi)
3. Выравнивание
📄 examples/classic_align.py
print("|%10s|" % "hi") # | hi|
print("|%-10s|" % "hi") # |hi |
✅ Рекомендуемый современный вариант
1. f-strings вместо %
📄 examples/modern_format.py
name = "Alice"
age = 30
print(f"My name is {name} and I am {age} years old.")
2. Форматирование float через f-strings
📄 examples/modern_float.py
pi = 3.14159
print(f"Pi ≈ {pi:.2f}")
3. Выравнивание через f-strings
📄 examples/modern_align.py
print(f"|{'hi':>10}|") # | hi|
print(f"|{'hi':<10}|") # |hi |
Преимущества современного стиля:
- Меньше кода и меньше возможностей для ошибок.
- f-strings быстрее, чем
%иformat(). - Не нужно помнить порядок и типы спецификаторов.
- Поддерживаются выражения и вызовы функций прямо внутри строки.
🕰️ Когда старый подход всё ещё полезен
- При работе с legacy-кодом, где уже используется
%. - В строках локализации (gettext) иногда удобнее отложенное форматирование через
format(). - Когда шаблон строки и данные находятся в разных местах программы —
format()может быть предпочтительнее f-strings.
🔍 Как распознать устаревший код
Если вы видите строки с множеством % и кортежами аргументов, это C-style форматирование. Его стоит переписать на f-strings при рефакторинге:
name = "Alice"
age = 30
# устаревший подход
print("My name is %s and I am %d years old." % (name, age))
# современный подход
print(f"My name is {name} and I am {age} years old.")
Проверить по документации: PEP 3101 определяет
str.format(), а f-strings описаны в PEP 498. Официальная документация рекомендует f-strings для большинства случаев.