首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python高阶函数中的变量作用域

Python高阶函数中的变量作用域
EN

Stack Overflow用户
提问于 2016-07-22 19:52:12
回答 2查看 597关注 0票数 0

我正在查看这里的一些学习材料:http://anandology.com/python-practice-book/functional-programming.html#higher-order-functions-decorators

特别是Memoize部分,其中使用以下代码作为高阶函数的示例:

代码语言:javascript
复制
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函数。为什么它可以工作,而不抛出错误?

EN

回答 2

Stack Overflow用户

发布于 2016-07-22 20:44:41

def memoize():行引入了一个新的作用域。g函数代码“看到”其封闭函数的作用域。当然,一定要研究一下这个问题的答案:Short Description of the Scoping Rules?

所以不是:这不是一个错误!这是一个非常好的特性。

票数 1
EN

Stack Overflow用户

发布于 2016-07-22 20:23:28

cache对象和g(x)对象都具有相同的作用域,因为它们都是memoize函数中的对象。这意味着g(x)将可以访问缓存,因为它们都是memoize函数中的对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38525774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档