是否可以在Python 2中模拟扩展元组解包?
具体来说,我有一个for循环:
for a, b, c in mylist:
Run Code Online (Sandbox Code Playgroud)
当mylist是大小为3的元组列表时,它工作正常.如果我传入一个大小为四的列表,我希望循环工作相同.
我想我最终会使用命名元组,但我想知道是否有一种简单的写法:
for a, b, c, *d in mylist:
Run Code Online (Sandbox Code Playgroud)
这样可以d吃掉任何额外的成员.
我有一些输入值的列表,其中第一对是强制性的,最后一对是可选的.是否有任何简单的方法可以使用元组解包将这些分配给变量,如果缺少可选参数则获取None.
例如.
a = [1,2]
foo, bar, baz = a
# baz == None
Run Code Online (Sandbox Code Playgroud)
理想情况下,可以是任何长度 - 包括超过3(其他物品扔掉).
目前我正在使用带有参数名称列表的zip来获取字典:
items = dict(zip(('foo', 'bar', 'baz'), a))
foo = items.get('foo', None)
bar = items.get('bar', None)
baz = items.get('baz', None)
Run Code Online (Sandbox Code Playgroud)
但它有点啰嗦.
我有一个元组列表,每个元组包含1到5个元素.我想将这些元组解压缩为五个值,但这对于少于五个元素的元组不起作用:
>>> t = (1,2) # or (1) or (1,2,3) or ...
>>> a,b,c,d,e = (t)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 2 values to unpack
Run Code Online (Sandbox Code Playgroud)
可以将不存在的值设置为None.基本上,如果这个函数我正在寻找更好(更密集)的方法:
def unpack(t):
if len(t) == 1:
return t[0], None, None, None, None
if len(t) == 2:
return t[0], t[1], None, None, None
if len(t) == 3:
return t[0], t[1], t[2], None, None
if len(t) == 4:
return t[0], t[1], t[2], t[3], None …Run Code Online (Sandbox Code Playgroud)