2013-07-25 46 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即可。真的有多難?你會爲自己節省很多心痛。