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

Python跨文件导入函数报错:global name 'efgh'未定义

解决函数导入后变量无法访问的NameError问题

这个问题的核心是Python的作用域规则:函数fun_a是在fun_a.py模块中定义的,它会优先查找自己所在模块的命名空间里的变量,而你在交互式环境中定义的efgh属于当前主模块(__main__)的命名空间,fun_a根本看不到它,所以抛出了NameError。

下面给你两种可行的解决方案,推荐第一种(更符合Python的编码规范):

方案1:将efgh作为参数传入函数(推荐)

这是最清晰、最易维护的方式,把函数需要的所有外部变量都显式作为参数传递:

修改fun_a.py的代码:

def fun_a(abcd, efgh):
    print '%s - %s'%(abcd, efgh)

if __name__ == "__main__":
    pass

然后在交互式环境中调用:

>>> from fun_a import *
>>> fun_a('test1', 'test2')
test1 - test2

方案2:在fun_a模块的命名空间中定义efgh

如果你不想修改函数的参数列表,可以在导入模块后,给fun_a所在模块的efgh变量赋值:

>>> import fun_a  # 注意这里要导入整个模块,而不是用from ... import *
>>> fun_a.efgh = 'test2'
>>> fun_a.fun_a('test1')
test1 - test2

或者直接在fun_a.py里预先定义efgh的默认值:

efgh = 'default_value'  # 预先定义模块级变量
def fun_a(abcd):
    print '%s - %s'%(abcd, efgh)

if __name__ == "__main__":
    pass

之后在交互式环境中可以覆盖这个值:

>>> from fun_a import *
>>> efgh = 'test2'
>>> fun_a('test1')
test1 - test2

不过这种方式会让函数依赖模块级变量,耦合性比较高,不推荐在复杂项目中使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:51:33