Декоратор для мемоизации функций.
functools.lru_cache(maxsize=128, typed=False)
-> callable
maxsize=128 -- Максимальное хранимое количество результатов (читай: размер кеша). Если установить в 'None', то размер не будет ограничен (и кеш перестанет быть LRU). Лучше, если значение будет степенью двойки.

+py3.3. typed=False -- Если 'True', то разные типы будут кешироваться отдельно: например, результаты 'f(3)' и 'f(3.0)' будут закешированы по отдельности.

LRU (least recently used) кеш — кеш с конечным размером, где часто используемые записи вытесняют прочие.

При помощи данного декоратора можно мемоизировать результат функции (запечатлеть результаты для конкретных наборов аргументов).
Такое кеширование позволяет экономить время и ресурсы, если тяжёлая функция вызывается периодически с более или менее одинаковым набором аргументов.

    from functools import lru_cache


@lru_cache(maxsize=30)
def get_articles(on_date):

# Здесь затратная операция, выбирающая статьи
# на определённую дату.
articles = [...]

return articles


get_articles('2017-12-12')
get_articles('2017-12-13')
get_articles('2017-12-12') # Взяты из кеша.


# Рассмотрим эффективность кеша:
get_articles.cache_info()
# CacheInfo(hits=1, misses=2, maxsize=20, currsize=2)

Внимание
Для кеширования результатов используется словарь, поэтому аргументы функции (именно они станут ключами словаря) должны поддерживать хеширование.

cache_info()

Эту функцию декоратор прикрепит к декорируемой функции. При помощи неё можно замерять эффективность кеша.
Она возвращает именованный кортеж CacheInfo со следующими атрибутами:

hitsКоличество попаданий в кеш.
missesКоличество промахов мимо кеша.
maxsizeМаксимальный размер кеша.
currsizeТекущий размер кеша.

На заметку
Если используются нити, то значения в hits и misses приблизительны.

cache_clear()

Эту функцию декоратор прикрепит к декорируемой функции. С её помощью можно очистить/инвалидировать кеш.

__wrapped__

Этот атрибут декоратор прикрепит к декорируемой функции. В нём будет содержаться ссылка на оригинальную функцию, к которой был применён декоратор. Может быть полезно для интроспекции, обхода кеша, или для оборачивания в другой кеш.
Синонимы поиска: functools.lru_cache, functools, lru_cache
На заметку
Зарегистрированные пользователи могут публиковать свои Статьи.