Декоратор для мемоизации в Python
Этот декоратор сохраняет результаты вызова функции с определёнными аргументами, что особенно полезно для затратных вычислений или рекурсивных алгоритмов. Если функция вызывается повторно с теми же параметрами, возвращается закэшированный результат.
def memoize(func):
"""
Декоратор для кэширования результатов функции.
"""
cache = {}
def wrapper(*args, **kwargs):
# Формируем ключ на основе позиционных и именованных аргументов
key = (args, tuple(sorted(kwargs.items())))
if key in cache:
return cache[key]
result = func(*args, **kwargs)
cache[key] = result
return result
return wrapper
# Пример использования:
@memoize
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
if __name__ == "__main__":
print("Факториал 5:", factorial(5))
print("Факториал 6:", factorial(6)) # Повторное использование кэша для factorial(5)