我在这里查看一些学习资料:http://anandology.com/python-practice-book/functional-programming.html#higher-order-functions-decorators
特别是Memoize
部分,其中以下代码用作高阶函数的示例:
def memoize(f):
cache = {}
def g(x):
if x not in cache:
cache[x] = f(x)
return cache[x]
return g
据我所知,memoize返回的函数无法访问"缓存"变量,因为它超出了" g"。
的定义范围 EG。如果我result_function = memoize(some_function)
result_function
将不知道任何cache
变量,因为它在g
函数之外声明,并且仅返回g
函数。为什么它可以工作,而不是抛出错误?
答案 0 :(得分:1)
def memoize():
行引入了新范围。 g
函数代码'看到'其封闭函数的范围。当然要看看这个问题的答案:Short Description of the Scoping Rules?。
所以不:那不是错误!这是一个非常好的功能。
答案 1 :(得分:0)
缓存对象和g(x)对象都具有与memoize函数中的两个对象相同的范围。这意味着g(x)将有权访问缓存,因为它们都是memoize函数中的对象。