Python从导入的文件中提取变量

时间:2016-07-28 09:17:30

标签: python import

我有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}}?

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