问题
- 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个ValueError。那么怎样才能从这个可迭代对象中解压出N个元素出来
解决
- Python的星号表达式可以解决这个问题
举例
(1)统计平均成绩,但是要求排除掉第一个和最后一个分数。如果只有四个分数,那么很简单;如果如果有24个呢?这时候就需要星号表达式了
def drop_first_last(grades):
first, *middle, last = grades
return avg(middle)
(2)分解用户注册信息。每条信息包括一个名字、邮件以及不定数量的电话号码。
>>> record = ('Dave', 'dave@example.com', '773-555-1212', '847-555-1212')
>>> name, email, *phone_numbers = record
>>> name
'Dave'
>>> email
'dave@example.com'
>>> phone_numbers
['773-555-1212', '847-555-1212']
(3)对比最近一个月的数据和前面 7 个月的平均值的对比
*trailing, current = [10, 8, 7, 1, 9, 5, 10, 3]
print(trailing)
print(current)
注意*表达式得到的一定是一个列表
(4)字符串的切割
>>> line = 'nobody:*:-2:-2:Unprivileged User:/var/empty:/usr/bin/false'
>>> uname, *fields, homedir, sh = line.split(':')
>>> uname
'nobody'
>>> homedir
'/var/empty'
>>> sh
'/usr/bin/false'
>>>
(5)有时候,你想解压一些元素后丢弃它们,你不能简单就使用 * ,可以这么写:
>>> record = ('ACME', 50, 123.45, (12, 18, 2012))
>>> name, *_, (*_, year) = record
>>> name
'ACME'
>>> year
2012
>>>