我正在查看这里的一些学习材料: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返回的函数不能访问"cache“变量,因为它超出了"g”的定义范围。
例如:如果我执行result_function = memoize(some_function),result_function将不知道任何cache变量,因为它是在g函数外部声明的,并且只返回g函数。为什么它可以工作,而不抛出错误?
发布于 2016-07-22 20:44:41
def memoize():行引入了一个新的作用域。g函数代码“看到”其封闭函数的作用域。当然,一定要研究一下这个问题的答案:Short Description of the Scoping Rules?。
所以不是:这不是一个错误!这是一个非常好的特性。
发布于 2016-07-22 20:23:28
cache对象和g(x)对象都具有相同的作用域,因为它们都是memoize函数中的对象。这意味着g(x)将可以访问缓存,因为它们都是memoize函数中的对象。
https://stackoverflow.com/questions/38525774
复制相似问题