问题
如果一个可迭代对象的元素个数超过变量个数时,会抛出一个ValueError。那么怎样才能从这个可迭代对象中解压出N个元素出来?
解决方案
Python的信号表达式可以用来解决这个问题。比如,你在学习一门课程,在学期末的时候,你想统计家庭作业的平均成绩,但是排序第一个和最后一个分数。如果只有4个分数,你可能就直接去简单的手动赋值,但是如果有24个呢?这个时候星号表达式就派上用场了:
from audioop import avg
def drop_first_last(grades):
first,*middle,last=grades
return avg(middle)
另外一种情况,假设你现在有一些用户的记录列表,每条记录包含一个名字,邮件、接着就是不确定的数字的电话号码,你可以像下面这样分解这些记录:
recode=('Dave','dave@example.com','773-555-1212','847-555-1212')
name,email,*phone_numbers=recode
print(f"name:{
name}")
print(f"phone_number:{
phone_numbers}")
'''输出结果
name:Dave
phone_number:['773-555-1212', '847-555-1212']
'''
值得注意的是上面解压的phone_number变量永远都是列表类型,不管解压的电话号码数量是多少(包括0个)、所以,任何