为什么跟随变量'count'给我们UnboundLocalError而变量'cache'没有

时间:2018-12-23 09:55:38

标签: python python-3.x decorator variable-assignment python-decorators

我正在使用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)    

但是,我在备忘录装饰器中插入变量count时感到困惑,因为在调用fibonacci函数时插入此变量会导致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无效的原因呢?

0 个答案:

没有答案