我试图了解,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 函数如何获取其上下文感到困惑。我想了解,引擎盖下会发生什么。
编辑
我知道,局部变量具有更高的优先级。我很好奇,python 在执行过程中如何知道从我之前调用的函数中获取参数。bar
已在其中创建foo
并且x
不再存在。它在创建函数时已将 this 绑定x
到参数值?