functools.cache()

@functools.cache(user_function)

Простой легкий неограниченный кеш функций. Иногда называется «memoize».

Возвращает то же самое, что и lru_cache (maxsize = None), создавая тонкую оболочку вокруг поиска по словарю для аргументов функции. Поскольку ему никогда не нужно удалять старые значения, он меньше и быстрее, чем lru_cache () с ограничением размера.

Например:

@cache
def factorial(n):
    return n * factorial(n-1) if n else 1

>>> factorial(10)      # нет ранее кэшированного результата, выполняет 11 рекурсивных вызовов
3628800
>>> factorial(5)       # просто ищет результат кешированного значения
120
>>> factorial(12)      # делает два новых рекурсивных вызова, остальные 10 кэшированы
479001600

Новое в версии 3.9.

Last updated