2011-03-11 86 views
20

我知道我可以一次分配多個變量,多個值用:分配的動態變量名一旦多個變量

(foo, bar, baz) = 1, 2, 3 

而且具有富= 1巴= 2,依此類推。

但是我怎樣才能使變量的名稱更具動態性?即,

somefunction(data,tupleofnames): 
    (return that each name mapped to a single datum) 

somefunction((1,2,3),(foo,bar,baz))  

和具有相同?

+0

什麼是分配變量的這種行爲是這樣的(FOO ,bar,baz = 1,2,3)叫? (而不是分配foo = 1,bar = 2,baz = 3)。謝謝! – 2015-01-13 21:09:05

+1

Hi @sindhus!它被稱爲「解構賦值」。 Python已經有一段時間了,它最近被添加到JavaScript中。 – mikemaccana 2015-01-13 21:10:16

回答

10

這個怎麼樣?

def somefunction(data, tupleofnames): 
    length = len(tupleofnames) 
    for i in range(0, length): 
     globals()[tupleofnames[i]] = data[i] 

在這裏,我假設數據和tupleofnames是列表,其中tupleofnames是字符串列表。但正如托馬斯所說,這不是一個好的做法。它可以輕易地破壞你的應用程序。

+0

經過一番考慮:雖然我明白指定什麼似乎任意變量名稱可能是一個壞主意,我喜歡這個答案,因爲它表明它是可能的(我的興趣主要是學術)。感謝您的回答! – mikemaccana 2011-03-11 19:01:54

13

有辦法做到這一點,但它們不是很好的方式,它在Python中被認爲是不好的做法。新變量不應該由魔法創建。如果您想要收集一些東西,請根據需要使用列表,字典或集合。

例如,你可以返回一個字典:{"foo":1, "bar":2, "baz":3}

3

退房的幫助文檔對於ZIP &地圖。 例如對於zip: -

>>> zip((1,2,3) , ('foo','bar','baz')) 
[(1, 'foo'), (2, 'bar'), (3, 'baz')] 

map需要將序列映射到一起的函數。但是,您可以使用None而不是函數返回與zip一樣的結果,如上所示。

>>> map(None, (1,2,3) , ('foo','bar','baz'))                      
[(1, 'foo'), (2, 'bar'), (3, 'baz')] 
+0

這裏使用地圖的要點是什麼?這正是'zip'的意圖! – 2016-06-02 19:07:13

5

你可以這樣說:

(foo, bar, baz) = (1, 2, 3) 
+1

然後甚至'(foo,bar,baz)= [None] * 3' – Tjorriemorrie 2014-11-12 15:20:31

+1

這似乎在功能上與問題中的第一行代碼完全相同,並且絕對不涉及動態變量名稱 - 你甚至讀過問題主體的任何部分,還是標題?或者我錯過了什麼? – Dukeling 2015-05-12 14:02:28

-1
(foo, bar, baz) = [None] * 3  
a,b,c = [0]*3  
a,b,c = ["nihao"]*3 
-1

我明白的答案上面已經他們所需要的,但我有一個很好的清涼編程技巧,可以當你想爲變量指定一個特定的元組時也會幫助你。

元組Ť

T =(A,B,C)

變量

VAR1,VAR2,VAR3 = T