我知道我可以一次分配多個變量,多個值用:分配的動態變量名一旦多個變量
(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))
和具有相同?
我知道我可以一次分配多個變量,多個值用:分配的動態變量名一旦多個變量
(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))
和具有相同?
這個怎麼樣?
def somefunction(data, tupleofnames):
length = len(tupleofnames)
for i in range(0, length):
globals()[tupleofnames[i]] = data[i]
在這裏,我假設數據和tupleofnames是列表,其中tupleofnames是字符串列表。但正如托馬斯所說,這不是一個好的做法。它可以輕易地破壞你的應用程序。
經過一番考慮:雖然我明白指定什麼似乎任意變量名稱可能是一個壞主意,我喜歡這個答案,因爲它表明它是可能的(我的興趣主要是學術)。感謝您的回答! – mikemaccana 2011-03-11 19:01:54
有辦法做到這一點,但它們不是很好的方式,它在Python中被認爲是不好的做法。新變量不應該由魔法創建。如果您想要收集一些東西,請根據需要使用列表,字典或集合。
例如,你可以返回一個字典:{"foo":1, "bar":2, "baz":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')]
這裏使用地圖的要點是什麼?這正是'zip'的意圖! – 2016-06-02 19:07:13
如果字典不是你想要的,那麼可能命名爲tuple的是要走的路: 它們允許有效地創建幾個分組在一起的數據實例, 帶有命名屬性。
http://docs.python.org/library/collections.html#collections.namedtuple
from collections import namedtuple
mytype = namedtuple("mytype", "foo bar baz")
a = mytype(1,2,3)
a.foo
1
a.bar
2
a.baz
3
你可以這樣說:
(foo, bar, baz) = (1, 2, 3)
然後甚至'(foo,bar,baz)= [None] * 3' – Tjorriemorrie 2014-11-12 15:20:31
這似乎在功能上與問題中的第一行代碼完全相同,並且絕對不涉及動態變量名稱 - 你甚至讀過問題主體的任何部分,還是標題?或者我錯過了什麼? – Dukeling 2015-05-12 14:02:28
(foo, bar, baz) = [None] * 3
a,b,c = [0]*3
a,b,c = ["nihao"]*3
我明白的答案上面已經他們所需要的,但我有一個很好的清涼編程技巧,可以當你想爲變量指定一個特定的元組時也會幫助你。
T =(A,B,C)
VAR1,VAR2,VAR3 = T
什麼是分配變量的這種行爲是這樣的(FOO ,bar,baz = 1,2,3)叫? (而不是分配foo = 1,bar = 2,baz = 3)。謝謝! – 2015-01-13 21:09:05
Hi @sindhus!它被稱爲「解構賦值」。 Python已經有一段時間了,它最近被添加到JavaScript中。 – mikemaccana 2015-01-13 21:10:16