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,提问作者김동동
相关产品推荐
相关产品推荐

