Modifying a variable from parent scope when inside a local function
本问题已经有最佳答案,请猛点这里访问。
我正在尝试完成以下任务:
1 2 3 4 5 6 | def counter(): _n = 0 def _increase(): _n += 1 return _n return _increase |
上述示例的行为如下:
1 2 3 4 5 6 7 | >>> c = counter() >>> c() 1 >>> c() 2 >>> c() 3 |
但是,当尝试复制此内容时,我得到以下错误:
1 2 3 4 | >>> c = counter() >>> c() UnboundLocalError: local variable '_n' referenced before assignment |
看起来它试图在本地范围内查找变量,因此我将代码更改为以下内容:
1 2 3 4 5 6 7 | def counter(): _n = 0 def _increase(): global _n _n += 1 return _n return _increase |
看起来它现在可以很好地定位它,但显然它没有初始化,即使我在声明函数之前执行
1 2 3 4 | >>> c = counter() >>> c() NameError: name '_n' is not defined |
显然,我做了一些错误的事情,在本例中,我不知道具体的Python行为。
我这里缺什么?
您正在查找
1 2 3 4 5 6 7 | def counter(): _n = 0 def _increase(): nonlocal _n _n += 1 return _n return _increase |
现在它应该可以按您的预期工作了。
1 2 3 4 5 6 7 | >>> c = counter() >>> c() 1 >>> c() 2 >>> c() 3 |