0

我正在尝试完成以下操作:

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 行为。

我在这里想念什么?

4

1 回答 1

1

您正在寻找nonlocal关键字。它允许您访问在周围范围内定义的变量,但不能访问全局范围。

def counter():
    _n = 0
    def _increase():
        nonlocal _n
        _n += 1
        return _n
    return _increase

现在它应该按您的预期工作。

>>> c = counter()
>>> c()
1
>>> c()
2
>>> c()
3
于 2019-02-18T17:53:26.730 回答