Я использовал этот превосходный декоратор для запоминания, который я нашел в Интернете (показанный здесь с последовательностью Фибоначчи в качестве примера):
def memoize(f):
cache= {}
def memf(*x):
if x not in cache:
cache[x] = f(*x)
return cache[x]
return memf
@memoize
def fib(n):
if n==1 or n==0:
return 1
return fib(n-2) + fib(n-1)
print fib(969)
Теперь я хотел бы немного лучше понять внутреннюю работу, я не нашел ответов, читая о декораторах или параметрах обработка в Python.
Почему словарь кеша не инициализируется повторно при каждом вызове декорированной функции?
Как *x распознается как параметры, отправленные декорированной функции, т. е. 969 в вызове функции fib(969)?