Я использую версию 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
- нет?