2024-04-19 10:18:34 发布
网友
在JS中,我们可以编写如下闭包:
function f(){ var a=0; function g(){ alert(a++); } return g; } g=f() g()
但是,如果我用python编写以下代码
然后我得到无限局部误差。在
有谁能告诉我python和JS中闭包的区别吗?在
python 2版本:
def f(): a=0 def g(): g.a+=1 print g.a g.a=a return g g=f() g()
在Python中使用a += 1时,它引用g函数范围内的局部(未初始化)变量。基本上,您可以从上面的作用域读取变量,但若您试图编写它,它将引用最近作用域中的变量。要使它像您希望的那样工作,您必须使用nonlocal关键字,它只存在于python3中。据我所知,在Python2中,您无法做到这一点,除非您试图更改的变量是全局变量,否则global关键字会起到拯救作用。在
a += 1
g
nonlocal
global
def f(): a=0 def g(): nonlocal a a+=1 print a return g g=f() g()
python 2版本:
在Python中使用
a += 1
时,它引用g
函数范围内的局部(未初始化)变量。基本上,您可以从上面的作用域读取变量,但若您试图编写它,它将引用最近作用域中的变量。要使它像您希望的那样工作,您必须使用nonlocal
关键字,它只存在于python3中。据我所知,在Python2中,您无法做到这一点,除非您试图更改的变量是全局变量,否则global
关键字会起到拯救作用。在相关问题 更多 >
编程相关推荐