2013-07-25 45 views
1

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

更具体地说,我一直在做

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

,但我不想要做x.var1

我只是想能够做到var1引用每个导入的元素。

这可能吗?

+1

'x.var1'有什么问题? – arshajii

+0

一个可怕的方法是'locals()。update({'monkey':1})''。 –

+0

如果你知道导入的元素的数量,你可以做一些愚蠢的事情,比如'var1,var2,var3 ... = imp.load_source(“test”,“./ test”)' – 2rs2ts

回答

1

我不知道我理解你的问题,我不确定你想做什么是一个好主意(想想Python的禅宗:“命名空间是一个好的想法 - 让我们来做更多这些!“)。你是否试图加载Python源代码文件并访问其局部变量?

再一次,我要重申警告这些是坏主意。

A.为什么使用imp模块?只需像正常一样导入模块。然后取它的所有局部范围,并将其导入到本地范围:

from test import * 

这是不好的Python的典型例子。不要这样做。每个Python程序员都会告诉你,从不使用_ import *。它会完成你想要做的事情,但是你可能会重写本地变量,甚至是内置的并导致不明确的错误。

B.使用execfile。这需要一个文件的来源并在本地范围内执行。像这样:

execfile('./test', globals(), locals()) 

这有同样的警告作为最后一个:这可能覆盖本地变量(包括内置插件),并导致模糊的错误。

2

如果它只是一个变量,那么你可以做这样的事情:

var1 = x.var1 

但是,如果你有大量的变量,你可以

from test import * 
do_something(var1) 

其中test是原来的模块...但不要那样做。我知道,这听起来有悖常理,但... read this。坦率地说,只需输入x.var1即可。真的有多难?你会为自己节省很多心痛。