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

Python跨模块导入全局变量后修改不生效问题咨询

问题:Python跨模块修改全局变量后未同步的疑惑

我有两个Python文件:

main.py 代码

globvar = 0

def set_globvar_to_one():
    global globvar    # 声明要修改全局作用域的globvar
    globvar = 1

cs.py 代码

from main import globvar
from main import set_globvar_to_one

def print_globvar():
    print(globvar)     # 读取变量不需要global声明

set_globvar_to_one()
print_globvar()

运行cs.py时输出为0,但我预期结果是1——明明调用了修改main.py全局变量的函数,也导入了globvar,请问哪里理解错了?


原因与解决方法

核心原因

当你用from main import globvar导入变量时,Python会把main.py中globvar的当前值(初始是0)复制一份,放到cs.py自己的命名空间里。这两个globvar是完全独立的对象:

  • 调用set_globvar_to_one()确实把main.py里的globvar改成了1,但cs.py里的那个复制版还是0,所以打印出来的是旧值。

解决方法

方法1:导入整个模块,通过模块名访问变量

修改cs.py,直接导入main模块,每次通过main.globvar访问变量,这样拿到的永远是main.py里的最新值:

import main
from main import set_globvar_to_one

def print_globvar():
    print(main.globvar)

set_globvar_to_one()
print_globvar()

方法2:新增获取全局变量的接口函数

在main.py里添加一个专门返回全局变量的函数,cs.py通过调用这个函数拿到最新值:
修改后的main.py:

globvar = 0

def set_globvar_to_one():
    global globvar
    globvar = 1

def get_globvar():
    return globvar

修改后的cs.py:

from main import set_globvar_to_one, get_globvar

def print_globvar():
    print(get_globvar())

set_globvar_to_one()
print_globvar()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:12:44