使用Python 3.6,为什么我不能这样写?

时间:2017-06-25 02:30:35

标签: python

def fun():
    i = 1
    def foo():
        i = i + 1
        return i

第二个' i'第4行尚未解决,请说明原因? 谢谢!

1 个答案:

答案 0 :(得分:1)

你需要让python知道i不是foo的局部变量。默认情况下,如果您在函数中设置变量(就像您在此处使用i = i + 1),则假定它是本地变量。

所以添加nonlocal i以声明i超出此范围,并在其闭包中。

def fun():
    i = 1
    def foo():
        nonlocal i
        i = i + 1
        return i

    # presumably you want to return foo as well ...
    return foo

现在,让我们测试一下:

>>> z = fun()
>>> z()
2
>>> z()
3