如何从元组中解压缩可选项?

时间:2014-01-31 15:09:21

标签: python tuples iterable-unpacking

我有一些输入值的列表,其中前两个是强制的,最后一个是可选的。有没有简单的方法可以使用元组解包将这些分配给变量,如果缺少可选参数则获取None。

例如

a = [1,2]   
foo, bar, baz = a
# baz == None

理想情况下,a可以是任意长度 - 包括超过3(其他项目丢弃)。

目前我正在使用带有参数名称列表的zip来获取字典:

items = dict(zip(('foo', 'bar', 'baz'), a))
foo = items.get('foo', None)
bar = items.get('bar', None)
baz = items.get('baz', None)

但是有点啰嗦。

3 个答案:

答案 0 :(得分:6)

从链接的问题来看,这有效:

foo, bar, baz == (list(a) + [None]*3)[:3]

答案 1 :(得分:3)

如何使用Try Except:

>>> a = [1,2]
>>> try:
...     foo, bar, baz = a
... except:
...     foo, bar = a
...
>>>

答案 2 :(得分:3)

使用itertools.izip_longest

from itertools import izip_longest
max_params = 3
args = (1, 2)

foo, bar, baz = zip(*izip_longest(args, range(max_params)))[0]

我应该注意,如果你发现自己必须这样做,你应该考虑将参数存储在dict而不是将它们解压缩到变量中。

<强>更新: 由于您坚持使用2.5,请尝试以下操作:

max_params = 3
args = (1, 2)

def unpack(args, param_length):
    return args + tuple(None for _ in range(param_length - len(args)))

foo, bar, baz = unpack(args, max_params)