import functools # Доступен с версии Python 3.9. cache = functools.cache(user_function) # или @functools.cache def my_function(): ...
user_function
- функция, которую надо кэшировать.Функция cache()
модуля functools
представляет собой простой легкий неограниченный кеш функций. Иногда называется "memoization".
Возвращает то же самое, что и @lru_cache(maxsize=None)
, создавая тонкую оболочку вокруг поиска по словарю для аргументов функции. Так как ему никогда не нужно удалять старые значения, он меньше и быстрее, чем @functools.lru_cache()
с ограничением размера.
@functools.cache
:import functools @functools.cache def factorial(n): return n * factorial(n-1) if n else 1 # нет ранее кэшированного результата, # выполняет 11 рекурсивных вызовов >>> factorial(10) # 3628800 # просто ищет результат кэшированного значения >>> factorial(5) # 120 # делает два новых рекурсивных вызова, # остальные 10 кэшируются >>> factorial(12) # 479001600