【发布时间】:2011-05-16 14:12:38
【问题描述】:
我试图了解,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 绑定到参数值?
【问题讨论】:
标签: python closures nested-function