Python从导入的文件中提取变量
问题描述:
我有3个文件。一个用于定义变量,另外两个包含所需的模块。Python从导入的文件中提取变量
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.
?
答
你想实现的是不可能的。 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
如果从可变进口*'你是从模块添加名字''做对variable'地方名称空间,因此它们在导入时指向变量的值。如果现在您更改了原始模块,则该更改将不会反映在导入的符号中。 – dhke
@dhke是的,我从这两个变体的工作理解。但我的问题有些不同。 – RatDon
[相关问题](http://*.com/questions/4758562/modifying-a-variable-in-a-module-imported-using-from-import)。 [好回答](http://*.com/a/4764225/6525140)。 – mhoff