20

我知道我可以一次将多个变量分配给多个值:

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

并且有 foo = 1,bar = 2,依此类推。

但是我怎样才能使变量的名称更加动态呢?IE,

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

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

和有同样的吗?

4

7 回答 7

13

有一些方法可以做到这一点,但它们不是很好的方法,并且在 Python 中被认为是不好的做法。新变量不应该被魔法创造出来。如果你想拥有一个东西的集合,请酌情使用列表、字典或集合。

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

于 2011-03-11T12:50:31.520 回答
10

这个怎么样?

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

在这里,我假设 data 和 tupleofnames 都是列表,其中 tupleofnames 是字符串列表。但正如托马斯所说,这不是一个好的做法。它很容易损坏您的应用程序。

于 2011-03-11T13:10:42.460 回答
6

如果字典不是您想要的,那么命名元组可能是可行的方法:它们允许有效地创建多个分组在一起的数据实例,并具有命名属性。

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
于 2011-03-11T14:47:59.403 回答
5

你可以这样做:

    (foo, bar, baz) = (1, 2, 3)
于 2014-02-05T18:44:10.733 回答
3

查看 zip 和 map 的帮助文档。例如对于邮编:-

>>>  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')]
于 2011-03-11T12:58:53.193 回答
-1
(foo, bar, baz) = [None] * 3    
a,b,c = [0]*3    
a,b,c = ["nihao"]*3
于 2016-04-14T13:13:44.443 回答
-1

我知道上面的答案已经是他们所需要的,但我有一个很酷的编程技巧,当你想将一个特定的元组分配给变量时,它也可以帮助你。

元组 T

T = (A,B,C)

变量

变量 1,变量 2,变量 3 = T

于 2016-05-04T15:54:26.327 回答