You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

嵌套函数中局部与非局部变量问题:代码运行异常原因解析

嵌套函数变量作用域问题解析

先看这段出问题的代码:

def f():
    x = 1

    def g():
        print(x)
        x = 1
    g()

f()

这段代码运行会抛出UnboundLocalError: local variable 'x' referenced before assignment错误,原因很直接:
Python在编译嵌套函数g的时候,会扫描函数内部的所有变量赋值操作。当它发现x = 1这行代码时,会直接把x标记为g的局部变量,而不会去外层的f函数作用域查找x。但print(x)在x赋值之前就执行了,这时候局部变量x还没被定义,自然就报错了。

接下来看两种注释后能正常运行的情况:

  • 注释掉x=1:此时g函数内部没有对x的赋值操作,Python就会按照作用域链向外查找,找到外层f函数里定义的x=1,所以print(x)能正常输出1。
  • 注释掉print(x):此时g函数里只有x=1,x被标记为局部变量,赋值操作正常执行,不会有任何问题。

内容的提问来源于stack exchange,提问作者MOHOSHA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 16:06:40