困惑的python3闭包

时间:2013-03-23 03:45:53

标签: python python-3.x closures

此代码

def gen(x):
    def f():
        return x

    return f

print(gen(1)())

效果很好。

但是当我运行此代码时,

def gen(x):
    def f():
        x += 1
        return x

    return f

print(gen(1)())

我收到错误显示

  

UnboundLocalError:赋值前引用的局部变量'x'

发生了什么事? 以及如何理解python3的关闭。

1 个答案:

答案 0 :(得分:2)

def gen(x):
    def f():
        nonlocal x # add this line
        x += 1
        return x

    return f

print(gen(1)())