我试图理解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不再存在。它绑定了该x到函数创建时的参数值吗?