Я пытаюсь написать декоратор python для memoize. У меня есть несколько вопросов.
- Как @memoize преобразуется в функцию call класса memoize?
- Почему init ожидает аргумент.
- Где хранится кеш? Это связано с каждой функцией или это глобальная переменная? т. е. Будет ли два объекта кеша, если я использую @memoize для нескольких функций.
..
class memoize:
def __init__(self):
self.cache = {}
def __call__(self, function):
def wrapper(*args, **kwargs):
key = str(function.__name__) + str(args) + str(kwargs)
if key in cache:
return cache[key]
else:
value = function(*args, **kwargs)
cache[key] = value
return value
return wrapper
@memoize
def fib(n):
if n in (0, 1):
return 1
else:
return fib(n-1) + fib(n-2)
for i in range(0, 10):
print(fib(i))
Я получаю ошибку компиляции.
Traceback (most recent call last):
File "memoize.py", line 17, in <module>
@memoize
TypeError: __init__() takes exactly 1 argument (2 given)
lru_cache
. - person Dair   schedule 26.01.2015