首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python闭包:函数内部定义的函数可以访问上面一级的变量吗?

Python闭包:函数内部定义的函数可以访问上面一级的变量吗?
EN

Stack Overflow用户
提问于 2017-08-20 16:00:27
回答 2查看 49关注 0票数 0

我在学习装饰师,我有个问题。在这个装饰函数call_counter中,定义并返回另一个函数,并“替换”作为参数传入的函数func

代码语言:javascript
运行
复制
def call_counter(func):
    def helper(*args, **kwargs):
        helper.calls += 1
        return func(*args, **kwargs)

    helper.calls = 0

    return helper

完成此操作后,我们可以通过以下方式从任何函数外部访问helper.calls

代码语言:javascript
运行
复制
@call_counter
def addition(x, y):
    return x + y

print(addition.calls)
addition(1, 2)
print(addition.calls)

产出:

代码语言:javascript
运行
复制
0
1

我的问题是,在调用和退出helper.calls函数之后,call_counter变量如何在内存中存在?据我所知,helper.calls存在于call_counter的内存中,但如果在call_counter执行完成后可以访问变量,这似乎不太可能。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-20 16:03:34

callshelper的一个属性,它将一直存活到helper死亡,而helper不会死,因为正如您所说的,它将以addition的名称存在。

票数 1
EN

Stack Overflow用户

发布于 2017-08-20 16:17:26

call_counter函数每次使用名称helper调用它时都会创建一个新的对象(函数)。call_counter函数将返回新创建的对象。当装潢师工作的时候,基本上是这样的:

代码语言:javascript
运行
复制
def addition(x,y):
    return x+y
addition = call_counter(addition)

因此,现在返回的对象(以前命名为helper的函数)存储在addition下。

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

https://stackoverflow.com/questions/45784105

复制
相关文章

相似问题

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