在 JS 中,我们可以这样写闭包:
function f(){
var a=0;
function g(){
alert(a++);
}
return g;
}
g=f()
g()
但是,如果我用 python 编写以下代码
def f():
a=0
def g():
a+=1
print a
return g
g=f()
g()
然后我得到UnboundedLocalError。
谁能告诉我 python 和 JS 中闭包的区别?
最佳答案
当您在 Python 中使用 a += 1
时,它指的是 g
函数范围内的局部(未初始化)变量。基本上您可以从上层作用域读取变量,但如果您尝试写入,它将引用最近作用域中的变量。要使其像您希望的那样工作,您必须使用仅存在于 Python 3 中的 nonlocal
关键字。据我所知,在 Python 2 中您不能这样做,除非您尝试使用的变量change is 是全局的,然后 global
关键字来拯救。
def f():
a=0
def g():
nonlocal a
a+=1
print a
return g
g=f()
g()
关于javascript - python 和 javascript 中闭包的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5910146/