python之cookbook-day02
第一章:数据结构和算法
1.2 解压可迭代对象赋值给多个变量
问题:
如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 valueerror 。那么 怎样才能从这个可迭代对象中解压出 n 个元素出来?
解决方案:
python 的星号表达式可以用来解决这个问题。
>>> record = ('hotskyi', 'hotskyi@example.com', '773-555-1212', '847-555-1212')
>>> name, email, *phone_numbers = record
>>> name
'hotskyi'
>>> email
'hotskyi@example.com'
>>> phone_numbers
['773-555-1212', '847-555-1212']
#星号表达式也能用在列表的开始部分。当然,这种方法可以很容易的将它分割成前后两部分。
>>> *trailing, current = [10, 8, 7, 1, 9, 5, 10, 3]
>>> trailing
[10, 8, 7, 1, 9, 5, 10]
>>> current
3
#星号解压语法在字符串操作的时候也会很有用,比如字符串的分割。
>>> 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'
>>> fields
['*', '-2', '-2', 'unprivileged user']
#有时候,你想解压一些元素后丢弃它们,你不能简单就使用 * ,但是你可以使用一个普通的废弃名称,比如 _ 或者 ign (ignore)。
>>> record = ('hotskyi', 50, 123.45, (01, 30, 2019))
>>> name, *_, (*_, year) = record
>>> name
'hotskyi'
>>> year
2019
>>>