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

Python中被导入的模块或包如何引用导入方脚本中定义的变量?

实现方案

共有3种常用实现方式,优先推荐第一种显式传参方案,耦合度最低、可维护性最强。

方案1:显式传参(最佳实践)

直接把主脚本的变量作为参数传入导入的函数,不需要依赖模块间的隐式上下文,代码可读性最高。
修改后代码:
pkg/a.py:

def f(var):
    print(var)

main.py:

from pkg.a import f
global_var = 10
f(global_var)

执行后直接输出10,符合预期。

方案2:主动获取主执行模块的属性

如果确实有场景不能修改函数的参数列表,可以通过sys.modules获取到运行入口的__main__模块,直接读取它的全局变量:
仅修改pkg/a.py即可:

import sys
def f():
    # 从入口模块取指定全局变量
    main_module = sys.modules['__main__']
    global_var = getattr(main_module, 'global_var', None)
    print(global_var)

main.py不需要修改,执行后即可输出10。
注意:如果主模块不存在对应变量,getattr会返回None,不会直接抛出异常,可根据需要调整容错逻辑

方案3:给被导入模块动态绑定变量

在主脚本定义完变量后,主动把变量绑定到被导入模块的属性上,被导入模块的函数直接读取自身模块的属性即可:
修改pkg/a.py:

# 可以先定义占位变量,也可以不定义,运行时动态绑定即可
global_var = None
def f():
    print(global_var)

修改main.py:

from pkg import a
from pkg.a import f

global_var = 10
# 给a模块动态绑定变量
a.global_var = global_var
f()

执行后也能输出10。

注意:方案2和3都存在强耦合问题,被导入模块的逻辑强依赖调用方的变量定义、导入逻辑,后续维护成本高,非特殊场景不建议使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:15:03