【问题标题】:confused by python3 closure [duplicate]被python3闭包弄糊涂了[重复]
【发布时间】:2013-03-23 03:45:52
【问题描述】:

这段代码

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的闭包。

【问题讨论】:

    标签: python python-3.x closures


    【解决方案1】:
    def gen(x):
        def f():
            nonlocal x # add this line
            x += 1
            return x
    
        return f
    
    print(gen(1)())
    

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 2019-01-12
      • 1970-01-01
      • 1970-01-01
      • 2014-08-14
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 2017-07-24
      相关资源
      最近更新 更多