СПРАВОЧНИК

Модули collections и functools

Специальные контейнеры и инструменты функций

Модуль collections добавляет специализированные контейнеры поверх встроенных dict, list и tuple: счётчики, словари с фабрикой значений по умолчанию, двусторонние очереди и именованные кортежи. Модуль functools содержит инструменты для работы с функциями высшего порядка: кэширование, частичное применение аргументов, корректное оборачивание декораторов и обобщённые функции. В этом томе собраны самые востребованные элементы обоих модулей с рабочими примерами.

collections 13

collections.ChainMap
collections.ChainMap(*maps)Объединяет несколько словарей в одно представление: поиск идёт по словарям слева направо.
collections.Counter
collections.Counter([iterable-or-mapping])Подкласс dict для подсчёта хэшируемых объектов: ключ — элемент, значение — количество вхождений.
collections.defaultdict
collections.defaultdict([default_factory[, ...]])Подкласс dict, который автоматически создаёт значение для отсутствующего ключа, вызывая фабрику default_factory.
collections.deque
collections.deque([iterable[, maxlen]])Двусторонняя очередь с быстрым добавлением и удалением элементов с обоих концов за O(1).
collections.namedtuple
collections.namedtuple(typename, field_names)Фабрика, создающая подкласс кортежа с доступом к полям по имени, а не только по индексу.
collections.OrderedDict
collections.OrderedDict([items])Словарь, который запоминает порядок вставки ключей и предоставляет методы move_to_end и popitem с управлением порядком.
Counter.elements
Counter.elements()Возвращает итератор по элементам, повторяя каждый столько раз, каково его количество.
Counter.most_common
Counter.most_common([n])Возвращает список из n самых частых элементов в виде пар (элемент, количество), отсортированных по убыванию.
Counter.update
Counter.update([iterable-or-mapping])Добавляет счётчики из другого итерируемого объекта или словаря, увеличивая существующие значения, а не заменяя их.
deque.appendleft
deque.appendleft(x)Добавляет элемент x в начало очереди за O(1).
deque.extendleft
deque.extendleft(iterable)Добавляет элементы итерируемого объекта в начало очереди; итоговый порядок оказывается обратным исходному.
deque.popleft
deque.popleft()Удаляет и возвращает элемент из начала очереди за O(1); вызывает IndexError, если очередь пуста.
deque.rotate
deque.rotate(n=1)Циклически сдвигает элементы очереди на n шагов вправо (или влево при отрицательном n).

functools 9

functools.cache
@functools.cacheПростой неограниченный кэш результатов функции, добавленный в Python 3.9; эквивалент lru_cache(maxsize=None).
functools.cached_property
@functools.cached_propertyПревращает метод в свойство, значение которого вычисляется один раз и сохраняется в словаре экземпляра.
functools.cmp_to_key
functools.cmp_to_key(func)Преобразует старомодную функцию сравнения двух аргументов в key-функцию для sorted, min, max и подобных.
functools.lru_cache
@functools.lru_cache(maxsize=128, typed=False)Декоратор, кэширующий результаты функции по аргументам с вытеснением наименее недавно использованных записей.
functools.partial
functools.partial(func, /, *args, **keywords)Создаёт новый вызываемый объект с частично зафиксированными аргументами исходной функции.
functools.reduce
functools.reduce(function, iterable[, initializer])Сворачивает итерируемый объект в одно значение, последовательно применяя функцию двух аргументов к накопленному результату.
functools.singledispatch
@functools.singledispatchПревращает функцию в обобщённую: реализация выбирается по типу первого аргумента через зарегистрированные варианты.
functools.total_ordering
@functools.total_orderingДекоратор класса, который достраивает все операторы сравнения по одному заданному и методу __eq__.
functools.wraps
@functools.wraps(wrapped)Декоратор для оборачивающих функций, копирующий метаданные (__name__, __doc__ и др.) с исходной функции на обёртку.
Поддержать проект