Мемоизация в Python

категория: Python 3

Простыми словами, мемоизация - это сохрание результата выполнения функции, и при следующем обращении, функция выдаст уже готовый результат, а не будет заново его обрабатывать. Очень полезно для сложных вычислений. Покажу на примере простой реализации в питоне:

class Memoize(object):
    def __init__(self, fn):
        self._fn = fn
        self.cache = {}
    def __call__(self, *args):
        if not args in self.cache:
            self.cache[args] = self._fn(*args)
        return self.cache[args]
@Memoize
def f(x, y):
    print('я работаю')
    return x ** y
>>> f(2, 2)
я работаю
2
>>> f(2, 2)
2
>>> f(3, 2)
я работаю
9
>>> f.cache
{(1, 2): 1, (3, 2): 9}

По сути - значения складываются в словарь с ключом по аргументам функции, и если заданые аргументы есть в словаре - возвращается значение, а сама функция не выполняется. Но это только простой пример, полную реализацию можно посмотреть в functools.lru_cache



blog comments powered by Disqus