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

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

Классический: конкатенация строк через + и форматирование через % — работают, но требуют внимания к типам.

Современный: f-строки вставляют выражения прямо в строку, читаются легче и работают быстрее.

Вывод: в новом коде предпочитайте f-strings; старые способы знайте, чтобы понимать чужой код.

📜 Классические способы форматирования

Исходный материал урока в основном использует базовые операции со строками. В стороннем и легаси-коде вы можете встретить старые подходы.

1. Конкатенация через +

📄 examples/old_concat.py
name = "Alice"
age = 30
message = "Hello, " + name + ". You are " + str(age) + " years old."
print(message)

Недостатки: много плюсов, нужно явно преобразовывать числа в строки, легко потерять пробелы.

2. Форматирование через %

📄 examples/old_percent.py
name = "Alice"
age = 30
message = "Hello, %s. You are %d years old." % (name, age)
print(message)

Недостатки: при большом количестве переменных легко перепутать порядок; ошибки типов проявляются во время выполнения.

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

📄 examples/old_format.py
name = "Alice"
age = 30
message = "Hello, {}. You are {} years old.".format(name, age)
print(message)

Это уже более читаемо, чем %, но всё ещё требует держать аргументы в голове.

✅ Современный подход: f-строки

f-строки появились в Python 3.6 и стали стандартом де-факто. Они позволяют встраивать выражения непосредственно в текст.

📄 examples/modern_fstring.py
name = "Alice"
age = 30
message = f"Hello, {name}. You are {age} years old."
print(message)

# Expressions are allowed inside braces
print(f"Next year you will be {age + 1}.")
Преимущества f-строк:
  • Код читается как обычное предложение.
  • Не нужно преобразовывать числа в строки вручную.
  • Можно использовать произвольные выражения.
  • Работают быстрее конкатенации и str.format().

Форматирование чисел

📄 examples/fstring_numbers.py
pi = 3.14159265
print(f"Pi rounded: {pi:.2f}")        # 3.14
print(f"Pi in scientific: {pi:.2e}")  # 3.14e+00

number = 42
print(f"Binary: {number:b}")          # 101010
print(f"Hex: {number:x}")             # 2a

🕰️ Когда старые способы ещё уместны

  • При работе с очень старым кодом, который использует % или .format().
  • Когда строка формата приходит извне, например из файла конфигурации: template.format(**data).
  • В учебных целях, чтобы понимать эволюцию языка.

🚀 Другие современные практики

  • Используйте .strip() для очистки пользовательского ввода.
  • Приводите строки к нижнему регистру для регистронезависимого сравнения: text.lower().
  • Проверяйте вхождение подстрок через in вместо ручного перебора.
  • Для путей предпочитайте raw-строки или модуль pathlib вместо ручного экранирования.
Проверить по документации: f-строки описаны в PEP 498 и официальной документации.