Python 3.2+functoolsфункция
functools.lru_cache
functools
Декоратор: кеширует результаты функции по аргументам (LRU, ограничен maxsize). Ускоряет повторные и рекурсивные вызовы.
Синтаксис
@functools.lru_cache(maxsize=128)
Ключом кеша служат сами аргументы, поэтому f(2) и f(n=2) занимают разные ячейки, а список или словарь в аргументах немедленно дают TypeError: unhashable. Кеш один на функцию и живёт до конца программы: навешанный на метод, он удерживает self и мешает сборке мусора — чистить через f.cache_clear(). Для рекурсии дефолтного maxsize=128 часто мало, а maxsize=None (то же самое, что functools.cache) заодно убирает накладные расходы на вытеснение.
Примеры
import functools
@functools.lru_cache
def sq(n):
return n * n
print(sq(4)) # → 16
print(sq(4), sq.cache_info().hits) # → 16 1
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности