用动态变量名一次性分配多个变量
我知道我可以用下面的方式一次性给多个变量赋值:
(foo, bar, baz) = 1, 2, 3
这样我就可以让foo等于1,bar等于2,依此类推。
但是我想知道,怎么才能让变量的名字更灵活一些?比如说:
somefunction(data,tupleofnames):
(return that each name mapped to a single datum)
somefunction((1,2,3),(foo,bar,baz))
这样也能实现吗?
7 个回答
6
如果字典不是你想要的,那可能可以考虑使用命名元组(namedtuple)。它们可以高效地创建多个数据实例,并且这些数据是分组在一起的,还有命名的属性。
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
14
有一些方法可以做到这一点,但这些方法都不太好,被认为是Python中的坏习惯。新变量不应该通过一些神秘的方式来创建。如果你想要存放一堆东西,应该使用列表、字典或集合,具体用哪个要看情况。
比如,你可以返回一个字典:{"foo":1, "bar":2, "baz":3}
10
这样怎么样呢?
def somefunction(data, tupleofnames):
length = len(tupleofnames)
for i in range(0, length):
globals()[tupleofnames[i]] = data[i]
在这里,我假设数据和tupleofnames都是列表,而tupleofnames是一个字符串的列表。不过,正如托马斯提到的,这样做并不是一个好习惯。这样很容易会让你的应用出现问题。