use*_*722 8 javascript python closures
在JS中,我们可以编写如下的闭包:
function f(){
var a=0;
function g(){
alert(a++);
}
return g;
}
g=f()
g()
Run Code Online (Sandbox Code Playgroud)
但是,如果我在python中编写以下代码
def f():
a=0
def g():
a+=1
print a
return g
g=f()
g()
Run Code Online (Sandbox Code Playgroud)
然后我得到UnboundedLocalError.
谁能告诉我python和JS中的闭包之间的区别?
a += 1在Python中使用时,它指的是g函数范围内的本地(未初始化)变量.基本上你可以从高端范围读取变量,但是如果你尝试编写变量,则会引用最近范围内的变量.为了让它像你想要的那样工作,你必须使用nonlocal仅存在Python 3的关键字.在Python 2中你不能这样做,除非你想要改变的变量是全局的,然后global关键字来了救援.
def f():
a=0
def g():
nonlocal a
a+=1
print a
return g
g=f()
g()
Run Code Online (Sandbox Code Playgroud)