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

Python如何跨多个函数正确修改全局变量并使其生效

问题原因

Python作用域规则决定了:只要你在函数内部对某个变量执行赋值操作,默认就会将该变量判定为函数内的局部变量。
你的代码里F1()中的a = 2并没有修改全局变量a,而是创建了一个和全局变量同名的局部变量a,这个局部变量会在F1()执行结束后被回收,全局的a始终保持初始值1,因此F2()读取全局变量时输出的还是1。

另外你把global a写在全局作用域是完全无效的:global关键字的作用是在函数内部声明「当前要操作的这个变量来自全局作用域,不要新建局部变量」,必须放在需要修改全局变量的函数体内部才能生效。

修复方案

在F1()的函数体内、修改a之前添加global a声明即可,修正后的代码如下:

a = 1

def F1():
  global a
  a = 2

def F2():
  print(a)

F1()
F2()

运行上述代码会输出预期结果2。

注意事项
  • 如果仅在函数内读取全局变量、不对其重新赋值,不需要加global声明,Python会自动沿作用域链向上查找变量;只有当你需要在函数内修改全局变量的绑定关系时,才需要用global声明。
  • 实际开发中不建议过度依赖全局变量在函数间传递状态,使用传参、返回值或者封装类的方式管理状态,代码的可维护性和可调试性会更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:31:36