python之cookbook-day0

2020-01-17 12:38:39 浏览数 (2)

第一章:数据结构和算法

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 >>>

0 人点赞