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

Python中使用global关键字声明变量时的底层执行逻辑是什么?

Python global 关键字底层原理解析

核心结论

global 是编译期生效的声明,不是运行到对应代码行才触发操作,它的作用是告诉Python解释器:当前函数内所有对该变量的读写,都直接操作全局命名空间的变量,不创建局部变量。


具体底层执行步骤

1. 函数定义编译阶段

Python解析器处理函数定义时,会预先扫描整个函数体的所有变量标识:

  • 扫描到 global x 声明后,会在当前函数的代码对象(code object)的标记位中,将 x 标记为全局变量
  • 不会把 x 加入当前函数的局部变量表(code object.co_varnames),后续所有对 x 的操作都会绕过局部命名空间

2. 函数运行阶段

所有对 global 声明变量的操作,都会直接指向当前模块的全局命名空间(即模块的 __dict__ 属性):

  • 读操作:直接从全局命名空间查找键,找不到就抛出 NameError
  • 写操作:直接给全局命名空间的对应键赋值,不存在就新增键值对

对应示例的逻辑解释

报错示例的底层逻辑

def function():
    global x
    print(x)

function()
print(x)

global x 只是告诉解释器函数内的 x 用全局的,但全程没有任何地方给全局命名空间的 x 赋值,全局命名空间里从来不存在 x 这个键,所以不管是函数内还是外部的 print(x) 查找都会失败,抛出 NameError。

正常运行示例的底层逻辑

def function():
    global x
    x = 2
    print(x)

function()
print(x)

函数运行到 x = 2 时,因为 x 已经被标记为全局变量,所以直接给全局命名空间新增了 x:2 的键值对,后续无论是函数内还是外部的读操作都能找到这个值,所以两次打印都输出2。


注意点

  • global 声明的作用范围是整个函数,哪怕你把声明写在函数中间,声明之前用到的同名变量也会被判定为全局变量,不会当做局部变量处理
  • 没有 global 声明时,函数内对变量的赋值默认会创建局部变量,读操作才会按照「局部→全局→内置」的顺序查找

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 06:57:04