⚖️ Старый и современный подход

⚡ Различия в двух словах

Старый подход: C-style форматирование через %. Может приводить к ошибкам типов и путанице с порядком аргументов.

Современный подход: f-strings — быстрые, читаемые, поддерживают выражения.

Вывод: в новом коде используйте f-strings; format() — когда шаблон отделён от данных.

📜 Классический подход из занятия

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 для большинства случаев.