gru*_*czy 10 python closures nested-function
我试图理解,python中的变量绑定是如何工作的.我们来看看这个:
def foo(x):
def bar():
print y
return bar
y = 5
bar = foo(2)
bar()
Run Code Online (Sandbox Code Playgroud)
这打印5对我来说似乎是合理的.
def foo(x):
def bar():
print x
return bar
x = 5
bar = foo(2)
bar()
Run Code Online (Sandbox Code Playgroud)
打印2,这很奇怪.在第一个示例中,python在执行期间查找变量,在第二个示例中查找方法.为什么会这样?
要清楚:这非常酷,并且完全按照我的意愿工作.但是,我对内部条形函数如何获取其上下文感到困惑.我想明白,引擎盖下会发生什么.
编辑
我知道,局部变量具有更高的优先级.我很好奇,python在执行过程中如何知道从我之前调用的函数中获取参数.bar已创建foo并且x不再存在.它x在创建函数时将其绑定到参数值?
你提到的问题是python中变量的词法与动态范围之一.为了明确,python定义了以下四个范围.
在第一个例子中,"y"在函数栏之外定义,python搜索最里面的范围并向上移动直到它在模块中找到全局变量"y"
在第二个例子中,"x"由函数foo(x)定义,当x被打印在bar中时,x属于封闭函数的范围.纯粹来说,已经定义了一个闭包.
为了进一步研究python中的作用域,我发现下面的文章很好