1.2 从任意长度的可迭代对象中分解元素
Q:需要从某个可迭代对象中分解N个元素,但是这个迭代对象的长度可能超过N,即会导致出现‘分解值过多’异常
S:* 表达式 ’ * '收集参数,并会统一放入’元组’中
def drop_first_last(grades):
first,*middle,last=grades
return avg(middle)
record=('Guan','gjd@gmail.com','77777-55555','8848-788999')
name,email,*phone_number=record
print(name)
print(email)
print(phone_number)
*的位置可变,不影响
*guan,jin=[1,2,3,4,5,6,7,8]
print(guan)
print(jin)
D:
对于分解未知或者任意长度的可迭代对象极为适合
同样处理特定的字符串操作如’拆分‘
line='nobody:*:-2:-3:C:\360Safe\ipc:\filecache'
name,*guan,hoby,sh=line.split(':')
print(name)
print(hoby)
print(sh)
print(guan)
有时可能想要丢弃某些值不能单指定一个单独的*
更习惯于用几个常常表示丢弃值的变量名如’_ ign
guan=('guan',30,123.32,(12,23,34))
name,*_,(*_,year)=guan
print(name)
print(year)
分解操作和各种函数式语言中的列表处理功能有着一定的相似性,如有一个列表,可如下分解头部尾部
item=[1,23,4,5,9,4]
head,*tail=item
print(head)
print(tail)