有没有办法将列表中的变量转换为python中的局部变量?
更具体地说,我一直在做
x = imp.load_source("test","./test")
但我不想做x.var1
我只希望能够var1
引用每个导入的元素。
这可能吗?
答案 0 :(得分:2)
如果它只是一个变量,那么你可以这样做:
var1 = x.var1
但是,如果您有大量变量,可以执行
from test import *
do_something(var1)
其中test
是原始模块...但不这样做。我知道,这听起来违反直觉,但...... read this。坦率地说,只需输入x.var1
即可。它有多难,真的吗?你会为自己省下很多心痛。
答案 1 :(得分:1)
我不确定我理解你的问题,而且我不确定你要做的是一个好主意(想想Python的禅宗:“命名空间是一个很棒的主意 - 让我们做更多那些!”)。您是否尝试加载Python源代码文件并可以访问其本地变量?
同样,我将重申警告,这些都是糟糕的想法。
一个。你为什么使用imp模块?只需像平常一样导入模块。然后取出它的所有局部范围并将其导入到本地范围:
from test import *
这是糟糕的Python的典型例子。不要这样做。每个Python程序员都会告诉你永远不要使用 _ import *。它将完成你想要做的事情,但你可能会覆盖局部变量甚至内置函数并导致模糊的错误。
B中。使用execfile
。它获取文件的源并在本地范围内执行它。像这样:
execfile('./test', globals(), locals())
这与上一个警告相同:这可能会覆盖局部变量(包括内置函数)并导致模糊的错误。