Понимание обработки параметров в декораторе мемоизации Python

Я использовал этот превосходный декоратор для запоминания, который я нашел в Интернете (показанный здесь с последовательностью Фибоначчи в качестве примера):

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)?

7
задан Sven Marnach 4 April 2012 в 12:24
поделиться