Python 嵌套函数中使用上层函数变量的问题?

为什么下面三个函数中的最后两个会出现异常而第一个不会?

def func(lst=[]):
    def inner_func():
        lst.append(10)
        return lst
    return inner_func()


def func2(num=10):
    def inner_func():
        num += 1
        return num
    return inner_func()


def func3(lst=[]):
    def inner_func():
        lst += [10]
        return lst
    return inner_func()


if __name__ == '__main__':
    print('func:', func())

    try:
        print('func2:', func2())
    except UnboundLocalError as e:
        print('func2:', e)

    try:
        print('func3:', func3())
    except UnboundLocalError as e:
        print('func3:', e)

执行结果:

func: [10]
func2: local variable 'num' referenced before assignment
func3: local variable 'lst' referenced before assignment
阅读 4.2k
1 个回答

python的变量作用域分为legb(随便找了一个博文你可以了解一下

在func2和func3中你对num、lst进行了赋值操作,导致这两个变量为局部作用域,而局部变量中又没有初始值(num += 1等价为num = num + 1),所以报错。

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题