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

⚡ Кратко: что важно

Урок повторяет модули time и collections (OrderedDict, Counter, deque, defaultdict), frozenset, functools.lru_cache, основы работы со словарями, передачу функций, lambda и парадигмы программирования.

Что запомнить: функцию передают без скобок; @lru_cache(maxsize=...) кэширует результаты; frozenset неизменяем и хешируем; OrderedDict управляет порядком через move_to_end() и popitem().

Топ-3 ошибки: передавать func() вместо ссылки func; забывать list() вокруг map/filter; пытаться изменить frozenset или использовать обычный set как ключ словаря.

Учебный / наивный подходСовременный вариантПочему так
Измерять время через time.time() для микросекундных интервалов.Для точных замеров использовать time.perf_counter().perf_counter() даёт наивысшее доступное разрешение и не зависит от системного времени.
Создавать OrderedDict только ради сохранения порядка.С Python 3.7+ обычный dict тоже сохраняет порядок; OrderedDict оставлять для move_to_end() и popitem(last=False).Меньше импортов, но специальные методы всё ещё нужны для очередей.
Писать собственный словарь для кэширования результатов.Использовать @lru_cache(maxsize=...) из functools.Проверенная реализация LRU, статистика и управление размером из коробки.
Сортировать вложенными циклами и сравнениями.Применять sorted(data, key=lambda x: ...).Короче, читается как критерий сортировки, устойчивая сортировка сохраняет порядок равных.
Писать def для одноразовой маленькой операции.Использовать lambda для коротких выражений, но выносить сложную логику в def.Читаемость важнее краткости.
Проверить по документации: современные детали поведения встроенных функций, стандартной библиотеки и версии Python сверяйте с официальной документацией.