将列表中的变量转换为局部变量

时间:2013-07-25 17:16:13

标签: python

有没有办法将列表中的变量转换为python中的局部变量?

更具体地说,我一直在做

x = imp.load_source("test","./test")

但我不想做x.var1

我只希望能够var1引用每个导入的元素。

这可能吗?

2 个答案:

答案 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())

这与上一个警告相同:这可能会覆盖局部变量(包括内置函数)并导致模糊的错误。