我正在使用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
无效的原因呢?