mik*_*ana 20 python destructuring mass-assignment
我知道我可以一次为多个值分配多个变量:
(foo, bar, baz) = 1, 2, 3
Run Code Online (Sandbox Code Playgroud)
并且foo = 1,bar = 2,依此类推.
但是,我如何才能使变量的名称更具动态性?也就是说,
somefunction(data,tupleofnames):
(return that each name mapped to a single datum)
somefunction((1,2,3),(foo,bar,baz))
Run Code Online (Sandbox Code Playgroud)
并有相同的?
Tho*_*s K 13
有办法做到这一点,但它们并不是很好的方式,而且在Python中被认为是不好的做法.不应该通过魔法创建新变量.如果您想拥有一组内容,请根据需要使用列表,字典或集合.
例如,您可以返回字典: {"foo":1, "bar":2, "baz":3}
fre*_*ish 10
这个怎么样?
def somefunction(data, tupleofnames):
length = len(tupleofnames)
for i in range(0, length):
globals()[tupleofnames[i]] = data[i]
Run Code Online (Sandbox Code Playgroud)
这里我假设数据和tupleofnames都是列表,其中tupleofnames是一个字符串列表.但正如托马斯所说,这不是一个好习惯.它很容易破坏你的应用程序.
如果词典不是您想要的,那么可能的命名方法就是:它们允许使用命名属性有效地创建组合在一起的多个数据实例.
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
Run Code Online (Sandbox Code Playgroud)