有什麼辦法將列表中的變量轉換爲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