我有3个档案。一个用于定义变量,另外两个包含所需的模块。
variable.py
my_var = ""
test.py
import variable
def trial():
variable.my_var = "Hello"
main.py (不工作)
from variable import *
from test import trial
if __name__ == "__main__":
trial()
print my_var
当我运行main.py
时,它什么都没有。但是,如果我像这样更改main.py
,
main.py (工作)
import variable
from test import trial
if __name__ == "__main__":
trial()
print variable.my_var
它给了我预期的输出,即Hello
。
在我的情况下,variable.py
包含更多变量,我不想在访问它们时使用variable.<variable name>
。在修改它们时,使用variable.<variable name>
不是问题,因为我只会根据用户的输入进行一次修改,然后在多个文件中多次访问它们。
现在我的问题是,有没有办法在main.py
修改后test.py
中提取所有变量并使用前缀为variable.
的<{1}}?
答案 0 :(得分:2)
您想要实现的目标是不可能的。 from MODULE import *
将所有变量名称和值导入到命名空间中,但不导入变量本身。变量在本地名称空间中分配,因此更改它们的值不会反映到它们的原点。但是,反映了对可变对象的更改,因为您导入的值基本上是对实例的引用。
这是为什么不建议使用上述结构的不合格进口的众多原因之一。相反,您应该质疑您的计划结构和您所做的设计决策。从长远来看,使用大量模块级变量会变得很麻烦且非常不方便。
考虑对应用程序使用更结构化的方法,例如使用类。
我想再次指出并给予this thread信用,这实质上解决了同样的问题。
编辑为了完整起见。这是可能的,但不推荐这种方法。每次对其非参考变量应用修改时,都必须重新导入模块:
from variable import * # optional
from test import trial
if __name__ == "__main__":
trial()
from variable import * # simply re-import the variables...
print my_var