Python如何获取其他导入模块定义的变量且避免重复触发用户输入
可行实现方案
方案1:显式传参(最优推荐)
直接修改modulename2中attribute2的函数签名,将var1作为入参传入,完全避免隐式导入依赖,符合Python「显式优于隐式」的设计原则,代码改动最小也最易维护:
- 修改
modulename2代码:
def attribute2(var1): # 原有调用var1的逻辑保持不变 atr2 = function(var1) + 'word' return atr2
- 修改
prog1中调用attribute2的代码,直接传入已拿到的var1:
import modulename1 var1 = modulename1.attribute1 import modulename2 var2 = attribute2(var1) # 直接把var1作为参数传入 # 后续function2、function3逻辑保持不变
方案2:模块全局变量寄存(适用于不能修改函数签名的场景)
如果因为其他依赖限制不能修改attribute2的入参,可以在modulename2中预留全局寄存位,由入口程序prog1导入后赋值,全程不需要modulename2导入任何其他模块:
- 修改
modulename2代码:
# 预留全局变量位存var1,初始值为空 _var1_holder = None def attribute2(): if _var1_holder is None: raise RuntimeError("请先从入口程序传入var1") atr2 = function(_var1_holder) + 'word' return atr2
- 修改
prog1代码,导入modulename2后先给寄存位赋值再调用函数:
import modulename1 var1 = modulename1.attribute1 import modulename2 # 给modulename2的全局变量赋值 modulename2._var1_holder = var1 var2 = modulename2.attribute2() # 后续逻辑保持不变
原代码问题说明
你原来在modulename2中导入prog1取var1的写法会触发循环导入报错:prog1导入modulename2的时候,自身还没执行到var1的定义步骤,modulename2导入prog1时会找不到var1变量。上述两个方案都可以同时规避循环导入、重复触发input两个问题,完全满足你的限制条件。
内容的提问来源于stack exchange,提问作者apepnefertum
相关产品推荐
相关产品推荐

