Вебинары Разобраться в IT Реферальная программа Тесты
Программирование Аналитика Дизайн Маркетинг Управление проектами
14 Мар 2024
2 мин
875

Как применять мемоизацию в Python

Пройдите тест, узнайте какой профессии подходите

Узнайте, как значительно ускорить выполнение вашего кода на Python с помощью мемоизации и декоратора functools.lru_cache!

Мемоизация — это техника оптимизации, которая позволяет сохранять результаты функций с целью избежать повторных вычислений. В 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 и применении мемоизации! 😊

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