📜 Классические способы форматирования
Исходный материал урока в основном использует базовые операции со строками. В стороннем и легаси-коде вы можете встретить старые подходы.
1. Конкатенация через +
name = "Alice"
age = 30
message = "Hello, " + name + ". You are " + str(age) + " years old."
print(message)
Недостатки: много плюсов, нужно явно преобразовывать числа в строки, легко потерять пробелы.
2. Форматирование через %
name = "Alice"
age = 30
message = "Hello, %s. You are %d years old." % (name, age)
print(message)
Недостатки: при большом количестве переменных легко перепутать порядок; ошибки типов проявляются во время выполнения.
3. Метод str.format()
name = "Alice"
age = 30
message = "Hello, {}. You are {} years old.".format(name, age)
print(message)
Это уже более читаемо, чем %, но всё ещё требует держать аргументы в голове.
✅ Современный подход: f-строки
f-строки появились в Python 3.6 и стали стандартом де-факто. Они позволяют встраивать выражения непосредственно в текст.
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}.")
- Код читается как обычное предложение.
- Не нужно преобразовывать числа в строки вручную.
- Можно использовать произвольные выражения.
- Работают быстрее конкатенации и
str.format().
Форматирование чисел
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вместо ручного экранирования.