对Python3闭包感到困惑

0 投票
1 回答
1118 浏览
提问于 2025-04-17 20:02

这段代码

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'

这是怎么回事呢?

还有,如何理解 Python 3 中的闭包?

1 个回答

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

    return f

print(gen(1)())

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

撰写回答