📜 Работа с файлами
# Старый подход
with open("grades.json", "r") as file:
data = json.load(file)
with open("report.json", "w") as file:
json.dump(data, file, indent=4)
Что здесь происходит: не указан encoding, поэтому на Windows может использоваться cp1252, а на Linux — utf-8. Это приводит к ошибкам с кириллицей.
✅ Современный вариант
from pathlib import Path
grades_path = Path("grades.json")
data = json.loads(grades_path.read_text(encoding="utf-8"))
report_path = Path("report.json")
report_path.write_text(
json.dumps(data, indent=4, ensure_ascii=False),
encoding="utf-8",
)
Что улучшилось: путь — объект, а не строка; кодировка явная; отсутствие необходимости вручную открывать и закрывать файл.
📜 Форматирование строк
# Старый подход
print("Номер: %s, длина: %d" % (number, length))
print("Номер: {}, длина: {}".format(number, length))
✅ Современный вариант
print(f"Номер: {number}, длина: {length}")
- Читаемее и компактнее.
- Быстрее выполняются, чем
%и.format. - Поддерживают произвольные выражения внутри фигурных скобок.
📜 Типы данных
# Старый подход
def get_quarter(date_str):
month = datetime.strptime(date_str, "%d-%m-%Y").month
...
✅ Современный вариант
from datetime import datetime
def get_quarter(date_str: str) -> str | None:
month = datetime.strptime(date_str, "%d-%m-%Y").month
...
Что улучшилось: аннотации типов помогают редактору подсказывать ошибки и делают контракт функции очевидным.
🕰️ Когда старый подход ещё можно встретить
Legacy-код, учебные материалы и некоторые скрипты могут использовать старый стиль. Это нормально, но в новых проектах рекомендуется применять современные практики. Главное — сохранять совместимость с Python 3.10+, так как оператор | для типов появился в Python 3.10.