我正在尝试完成类似以下操作:
def counter():
_n = 0
def _increase():
_n += 1
return _n
return _increase
上面的示例应该这样的行为:
>>> c = counter()
>>> c()
1
>>> c()
2
>>> c()
3
但是,在尝试复制此问题时,我会收到以下错误:
>>> c = counter()
>>> c()
UnboundLocalError: local variable '_n' referenced before assignment
看起来它正在尝试在本地范围中找到变量,因此我将代码更改为以下:
def counter():
_n = 0
def _increase():
global _n
_n += 1
return _n
return _increase
看来它现在可以找到它可以了,但是显然,即使我在声明该功能之前执行_n = 0
。
>>> c = counter()
>>> c()
NameError: name '_n' is not defined
显然我做错了什么,在这种情况下,我不知道特定的python行为。
我在这里缺少什么?
您正在寻找nonlocal
关键字。它允许您访问在周围范围中定义的变量,但不能访问全局范围。
def counter():
_n = 0
def _increase():
nonlocal _n
_n += 1
return _n
return _increase
现在它应该按照您的意图工作。
>>> c = counter()
>>> c()
1
>>> c()
2
>>> c()
3