我正在尝试完成以下操作:
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行为。
我在这里想念什么?
答案 0 :(得分:1)
您正在寻找nonlocal
关键字。它允许您访问在周围范围(而不是全局范围)中定义的变量。
def counter():
_n = 0
def _increase():
nonlocal _n
_n += 1
return _n
return _increase
现在它应该可以按预期工作了。
>>> c = counter()
>>> c()
1
>>> c()
2
>>> c()
3