我正在尝试在 Python 2.7 中实现 Javascript 闭包。
考虑以下代码:
var = {'upper_scope':None}
def f1():
print var
def f2():
var = {'upper_scope': var}
第一个函数工作正常。第二个在第一行失败:
UnboundLocalError: local variable 'var' referenced before assignment.
我想从上层作用域中读取 var 的值,并将其放入名为 var 的本地字典中。
请您参考如下方法:
它在 f2() 中不起作用,因为您在本地覆盖了 var 的全局定义。 如果您在 f2() 中重命名 var,它将起作用:
def f2():
other_var = {'upper_scope': var}
或者,您可以将其定义为全局变量,然后 var 值的更改也将应用于全局变量,如下所示:
def f2():
global var
var = {'upper_scope': var}
话虽如此,将变量作为参数传递给函数始终是一种更好的方法,除非您确实在多个地方需要它和/或需要更改其值。
