Мемоизация — это техника оптимизации, которая позволяет сохранять результаты функций с целью избежать повторных вычислений. В Python, для реализации мемоизации, часто используется декоратор functools.lru_cache. В этой статье мы рассмотрим, как применять мемоизацию в Python с помощью данного декоратора.
functools.lru_cache
functools.lru_cache — это декоратор, который позволяет кэшировать результаты вызова функции с определенными аргументами. Если функция вызывается с уже сохраненными аргументами, результат будет взят из кэша, что может существенно ускорить выполнение кода. Рассмотрим пример использования lru_cache:
import functools
@functools.lru_cache()
def fib(n):
if n < 2:
return n
else:
return fib(n-1) + fib(n-2)
print(fib(100))
В данном примере мы применили декоратор lru_cache к функции fib, вычисляющей числа Фибоначчи. Без мемоизации вычисление больших чисел Фибоначчи может занимать долгое время, но с использованием кэша функция работает значительно быстрее.
Ограничение размера кэша
По умолчанию functools.lru_cache использует кэш с максимальным размером 128 элементов. Если кэш превышает этот размер, наименее использованные элементы будут удалены. Вы можете изменить размер кэша, передав параметр maxsize:
@functools.lru_cache(maxsize=256)
def fib(n):
# ...
Очистка кэша
В некоторых случаях может потребоваться очистить кэш, например, при изменении внешних данных, влияющих на результат функции. Для этого используйте метод cache_clear():
fib.cache_clear()
Вывод
Мемоизация — полезная техника оптимизации, которая может существенно ускорить выполнение вашего кода. В Python, для применения мемоизации, используйте декоратор functools.lru_cache. Он позволяет кэшировать результаты функций с заданными аргументами и управлять размером кэша.
Не забывайте, что мемоизация подходит только для функций без побочных эффектов и с детерминированными результатами. Если результат функции зависит от внешних факторов или вызывает побочные эффекты, мемоизация может привести к непредсказуемому поведению.
Удачи в изучении Python и применении мемоизации! 😊
Перейти в телеграм, чтобы получить результаты теста





Забрать
Добавить комментарий