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

如何从导入模块修改Python主脚本(__name__=__main__)中的变量

如何从模块修改主脚本(name=main)中的变量值

问题背景

我有一个名为main.py的Python主脚本,以及一个名为module_1.py的模块,主脚本中导入了该模块。我需要在module_1.py中修改main.py里的变量x的值,为避免循环导入问题,我在module_1的pp()函数内导入main.py并设置main.x=12,但实际修改的是作为模块的main中的x,而非主脚本(name=main)里的x。

原代码与执行结果

main.py

import module_1

x = "45"
module_1.pp()

print(f"{__name__} : {x}")

module_1.py

def pp():
    import main
    main.x = 12

执行结果

main : 12
__main__ : 45

问题原因

当直接运行main.py时,它会以__main__模块的身份被加载;而在module_1.py中import main时,Python会重新加载main.py并将其作为main模块实例化——这是两个完全独立的模块对象。因此你修改的是main模块里的x,而非主脚本__main__中的x。

解决方案

方法1:传递主脚本的命名空间

直接把主脚本的全局命名空间(通过globals()获取)传给模块函数,在函数内修改该命名空间中的变量:

修改后的main.py

import module_1

x = "45"
module_1.pp(globals())

print(f"{__name__} : {x}")

修改后的module_1.py

def pp(namespace):
    namespace['x'] = 12

方法2:让函数返回新值,主脚本自行赋值

这种方式更符合模块化设计原则,避免直接修改外部命名空间:

修改后的main.py

import module_1

x = "45"
x = module_1.pp(x)

print(f"{__name__} : {x}")

修改后的module_1.py

def pp(current_x):
    # 可根据需求添加逻辑处理
    return 12

方法3:用可变对象包装变量

利用Python中可变对象的引用特性,将变量放入列表、字典等可变容器中,修改容器内的元素即可影响主脚本中的值:

修改后的main.py

import module_1

x = ["45"]  # 用列表包装字符串
module_1.pp(x)

print(f"{__name__} : {x[0]}")

修改后的module_1.py

def pp(x_list):
    x_list[0] = 12

最终执行结果

上述三种方法执行后,都会输出:

__main__ : 12

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 12:13:29