我有一些输入值的列表,其中前两个是强制的,最后一个是可选的。有没有简单的方法可以使用元组解包将这些分配给变量,如果缺少可选参数则获取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)
但是有点啰嗦。
答案 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)