⚠️ Типичные ошибки

⚡ Кратко: ошибки

time.time() помогает измерять длительность, sleep() делает задержку.

collections содержит специализированные структуры данных.

OrderedDict сохраняет порядок и умеет move_to_end().

popitem(last=False) удаляет первый элемент OrderedDict, что удобно для очереди.

Кэш хранит результаты повторных операций, LRU удаляет давно не используемые записи.

@lru_cache кэширует вызовы функции по аргументам.

defaultdict создаёт значение по умолчанию при обращении к отсутствующему ключу.

Counter считает элементы и умеет most_common(), elements(), update(), subtract().

Топ-3 ошибки: использовать sleep() в измерении быстрых операций; забывать, что defaultdict добавляет ключ при чтении; ожидать от Counter вычитания отрицательные значения при операторе -.

defaultdict меняется при чтении

Обращение dd['missing'] создаёт новый ключ.

Если не хотите менять словарь, используйте get().

from collections import defaultdict

dd = defaultdict(list)
print(dd.get("missing", []))
print(dict(dd))

Нехешируемые аргументы в lru_cache

@lru_cache не принимает list как часть ключа кэша.

Передавайте tuple или другой хешируемый тип.

from functools import lru_cache

@lru_cache(maxsize=4)
def total(numbers):
    return sum(numbers)

print(total((1, 2, 3)))

Ожидание порядка от Counter

Counter решает задачу подсчёта, а не форматирования отчёта.

Для отчёта явно используйте most_common() или sorted().

from collections import Counter

counter = Counter("banana")
print(counter.most_common())