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

Python如何在另一个文件中使用和修改全局变量

问题根因

调用a.f()时实际修改的是s1模块全局命名空间下的变量i,但你在s2.py中使用from s1 import *导入时,相当于在s2的当前命名空间新建了一个独立的变量i,这个变量仅初始值和s1.i一致,二者是完全独立的两个变量,因此修改s1.i不会影响s2本地的i,打印结果始终为1。

解决方案

方案1(推荐):直接导入模块访问全局变量

修改s2.py代码如下:

import s1

s1.a.f()
print(s1.i)

运行后输出结果为3,符合预期。该方案直接操作s1模块下的同一个i变量,修改可以同步生效。

方案2:使用可变容器包裹全局变量

如果需要保留from s1 import *的写法,可以将全局变量放在列表、字典这类可变容器中,导入后修改容器内元素会同步生效:
修改s1.py代码:

# 用列表(可变对象)包裹i
i = [1]

class a():
    def f():
        global i
        i[0] = 3

s2.py代码不变:

from s1 import *

a.f()
print(i[0])

运行后同样输出3。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:39:04