从任意长度的可迭代对象中分解元素
问题:需要从某个可迭代对象中分解出N个元素,但是这个可迭代对象的长度可能超过N,会导致出现“too many values to unpack”的异常。
解决方案:
Python的“*表达式”可以用来解决这个问题。
例如:假设开设了一门课程,并且决定在期末的作业成绩中去掉第一个和最后一个,只对中间剩下的成绩做平均分统计。*表达式可以解决这样的问题。
def drop_first_last(grades):
first,*middle,last = grades
return avg(middle)
*表达式在迭代一个变长的元组序列时尤其有用。
records [
('foo',1,2),
('bar','hello'),
('foo',3,4),
]
def do_foo(x,y):
print('foo',x,y)
def do_bar(s):
print('bar',s)
for tag,*args in records:
if tag == 'foo':
do_foo(*args)
elif tag == 'bar':
do_bar(*args)
*分解操作和各种函数式语言中的列表处理功能有着一定的相似性。