python之cookbook-day0

发布时间:2019-05-09 22:09:44编辑:auto阅读(2091)

    第一章:数据结构和算法

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

     

关键字