假设您有一个装饰器函数,该函数创建一个字典来存储由于性能原因而已计算的结果。例如:
def memoize(func):
cache = dict()
def memoized_func(*args, **kwargs):
if args in cache:
return cache[args]
result = func(*args)
cache[args] = result
return result
return memoized_func
当我用myfunc = memoize(myfunc)
装饰函数时,我很难理解它为什么起作用。
我起初以为,缓存超出范围后,在返回备注函数后会丢失缓存。我只会返回对装饰函数的引用。显然,事实并非如此。
有人可以告诉我幕后发生的事情吗?
答案 0 :(得分:0)
装饰器函数在存储缓存的地方具有自身的非本地范围。该范围不会在函数调用后销毁。有更多信息https://docs.python.org/3/reference/simple_stmts.html#the-nonlocal-statement