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

已声明global b的情况下,为什么Python代码中第三个print输出为10?

Python代码执行结果原因解释

你提供的代码如下:

b=11
def outer():
    b=10
    print(b)
    def inner():
        global b
        print(b)
        b=20
    inner()
    print(b)
outer()
print(b)

核心原因

Python的变量作用域规则决定了三个位置的b属于不同的作用域:

  • 代码最外层定义的b是全局作用域变量
  • outer函数内部定义的b是outer的局部作用域变量,和全局b是完全独立的两个变量
  • inner函数里用global b声明后,inner内部所有对b的操作都只会指向全局作用域的b,和outer的局部b没有任何关联

完整执行流程

  • 调用outer(),首先给outer的局部b赋值为10,第一个print(b)输出10
  • 执行inner():因为声明了global b,第一个print(b)读取全局b的初始值11并输出,随后把全局b的值修改为20,inner执行结束
  • 回到outer函数执行第三个print(b):此处访问的是outer自己的局部b,这个变量从来没有被修改过,值还是10,所以输出10
  • outer执行结束,最后一个print(b)读取已经被修改的全局b,输出20

补充说明

如果你需要让inner修改outer的局部变量b,只需要把inner里的global b改成nonlocal b即可,nonlocal关键字会让解释器找上一层嵌套函数的局部变量。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:09:03