📖 Теория

⚡ Кратко: теория

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 вычитания отрицательные значения при операторе -.

Модуль time

time.time() возвращает количество секунд с Unix epoch. Разность двух вызовов можно использовать для грубого измерения длительности.

sleep(seconds) останавливает выполнение программы на указанное время.

import time

start = time.time()
values = list(range(1000))
end = time.time()
print(len(values))
print(round(end - start, 6))

OrderedDict

OrderedDict работает как словарь, но предоставляет дополнительные операции управления порядком.

В современных версиях dict сохраняет порядок вставки, но OrderedDict всё ещё полезен для move_to_end() и popitem(last=False).

from collections import OrderedDict

queue = OrderedDict()
queue["first"] = 1
queue["second"] = 2
queue["third"] = 3
print(queue.popitem(last=False))

Кэш и LRU

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

LRU-кэш ограничивает размер и удаляет запись, которая использовалась раньше всех.

from functools import lru_cache

@lru_cache(maxsize=2)
def compute_square(number):
    print(f"compute {number}")
    return number * number

print(compute_square(2))
print(compute_square(2))

defaultdict

defaultdict(default_factory) создаёт значение для отсутствующего ключа автоматически.

Для группировки часто используют defaultdict(list), для подсчёта - defaultdict(int).

from collections import defaultdict

groups = defaultdict(list)
groups["class1"].append("Alice")
groups["class1"].append("Charlie")
print(dict(groups))

Counter

Counter создаёт словарь частот из строки, списка или другого итерируемого объекта.

most_common(n) возвращает самые частые элементы.

from collections import Counter

words = ["apple", "banana", "apple"]
counter = Counter(words)
print(counter)
print(counter.most_common(1))
Проверить по документации: современные детали поведения встроенных функций, стандартной библиотеки и версии Python сверяйте с официальной документацией.