Почему следующая переменная 'count' дала нам UnboundLocalError, а переменная 'cache' - нет - PullRequest
0 голосов
/ 23 декабря 2018

Я использую версию python3.7.0. Я пытаюсь реализовать шаблон декоратора, который сохранил свой 'результат с помощью словарной переменной cache

def memoize(fn): 
    cache = dict() 
    @wraps(fn) 
    def memoizer(*args,**kwargs): 
        if args not in cache: 
            cache[args] = fn(*args,**kwargs) 
        return cache[args] 

    return memoizer


@memoize
def fibonacci(n): 
    '''Returns the suite of Fibonacci numbers''' 
    assert(n >= 0), 'n must be >= 0'
    if n in (0, 1):
        return n
    else:
        return fibonacci(n-1) + fibonacci(n-2)    

Однако я путаюсь, когда вставляю varaible count в декораторе memoize, так как вставка этой переменной вызвала UnboundLocalError при вызове функции Фибоначчи.

def memoize(fn): 
    cache = dict() 
    count = 0
    @wraps(fn) 
    def memoizer(*args,**kwargs): 
        count += 1
        if args not in cache: 
            cache[args] = fn(*args,**kwargs) 
        return cache[args] 

    return memoizer

Я не мог понять, почему использование целочисленных переменных count с функцией декоратора вызвало UnboundLocalError, а со словарной переменной cache - нет?

...