我想了解 python 中的变量绑定到底是如何工作的。让我们看看这个:
def foo(x):
def bar():
print y
return bar
y = 5
bar = foo(2)
bar()
这打印 5 对我来说似乎是合理的。
def foo(x):
def bar():
print x
return bar
x = 5
bar = foo(2)
bar()
这会打印 2,这很奇怪。在第一个示例中,python 在执行期间查找变量,在第二个示例中,则在创建方法时查找变量。为什么会这样呢?
需要明确的是:这非常酷并且完全按照我的意愿工作。但是,我对内部 bar 函数如何获取其上下文感到困惑。我想了解幕后发生了什么。
EDIT
我知道,局部变量具有更高的优先级。我很好奇,python 如何知道在执行过程中从我之前调用过的函数中获取参数。bar
创建于foo
and x
已不存在了。它已经绑定了这个x
创建函数时的参数值?
第二个例子实现了所谓的closure。功能bar
正在引用变量x
从它周围的上下文,即函数foo
。这先于对全局变量的引用x
.
另请参阅这个问题你能解释一下闭包(因为它们与 Python 相关)吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)