有什么办法将列表中的变量转换为python中的局部变量?将列表中的变量转换为局部变量
更具体地说,我一直在做
x = imp.load_source("test","./test")
,但我不想要做x.var1
我只是想能够做到var1
引用每个导入的元素。
这可能吗?
有什么办法将列表中的变量转换为python中的局部变量?将列表中的变量转换为局部变量
更具体地说,我一直在做
x = imp.load_source("test","./test")
,但我不想要做x.var1
我只是想能够做到var1
引用每个导入的元素。
这可能吗?
我不知道我理解你的问题,我不确定你想做什么是一个好主意(想想Python的禅宗:“命名空间是一个好的想法 - 让我们来做更多这些!“)。你是否试图加载Python源代码文件并访问其局部变量?
再一次,我要重申警告这些是坏主意。
A.为什么使用imp模块?只需像正常一样导入模块。然后取它的所有局部范围,并将其导入到本地范围:
from test import *
这是不好的Python的典型例子。不要这样做。每个Python程序员都会告诉你,从不使用_ import *。它会完成你想要做的事情,但是你可能会重写本地变量,甚至是内置的并导致不明确的错误。
B.使用execfile
。这需要一个文件的来源并在本地范围内执行。像这样:
execfile('./test', globals(), locals())
这有同样的警告作为最后一个:这可能覆盖本地变量(包括内置插件),并导致模糊的错误。
如果它只是一个变量,那么你可以做这样的事情:
var1 = x.var1
但是,如果你有大量的变量,你可以做
from test import *
do_something(var1)
其中test
是原来的模块...但不要那样做。我知道,这听起来有悖常理,但... read this。坦率地说,只需输入x.var1
即可。真的有多难?你会为自己节省很多心痛。
'x.var1'有什么问题? – arshajii
一个可怕的方法是'locals()。update({'monkey':1})''。 –
如果你知道导入的元素的数量,你可以做一些愚蠢的事情,比如'var1,var2,var3 ... = imp.load_source(“test”,“./ test”)' – 2rs2ts