Python如何将主文件变量传入存放函数的模块,避免循环导入错误?
你遇到的循环导入错误的根源是主文件和importtest互相导入形成了依赖死循环,这是Python导入机制的正常限制,不需要用跨模块导入主文件变量的方式实现需求,两种常用的解决方法如下:
方法1:函数传参(最推荐)
只需要给需要用到x的函数增加入参,调用的时候把x传进去即可,符合函数封装的规范,可维护性最高:
修改后的importtest.py代码
# 不需要导入主文件,删除所有导入主文件的语句 def greeting(): print("Hello, bob") # 增加入参number接收外部传入的变量 def bye(number): print("Bye, bob" + number)
修改后的主文件代码
import importtest x = input("Number") importtest.greeting() # 调用时传入x作为参数 importtest.bye(x)
方法2:模块全局变量赋值(适合多函数共享同一个变量的场景)
如果importtest里有多个函数都要用到这个变量,不想每个都写重复的传参逻辑,可以提前在importtest里定义一个全局变量,主文件导入后先给这个变量赋值再调用函数:
修改后的importtest.py代码
# 预先定义占位的全局变量,不需要导入主文件 share_number = None def greeting(): print("Hello, bob") def bye(): print("Bye, bob" + share_number)
修改后的主文件代码
import importtest x = input("Number") # 先给importtest的全局变量赋值 importtest.share_number = x importtest.greeting() importtest.bye()
注意:优先选择函数传参的方案,不会出现变量漏赋值、被意外修改的隐藏问题,全局变量方案只建议在变量确实需要被模块内大量函数复用的场景使用。
内容的提问来源于stack exchange,提问作者warcraftisgood
相关产品推荐
相关产品推荐

