python 可变长元组的序列
  YQBUvtbFE7rq 2023年12月04日 15 0

值得注意的是,星号表达式在迭代元素为可变长元组的序列时是很有用的。比如, 下面是一个带有标签的元组序列:

records = [
    ('foo', 1, 2),
    ('bar', 'hello'),
    ('foo', 3, 4),
]
def do_foo(x, y): print('foo', x, y)
def do_bar(s): print('bar', s)
for tag, *args in records: if tag == 'foo':
do_foo(*args) elif tag == 'bar':
        do_bar(*args)

星号解压语法在字符串操作的时候也会很有用,比如字符串的分割。

代码示例:

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

有时候,你想解压一些元素后丢弃它们,你不能简单就使用 * ,但是你可以使用一 个普通的废弃名称,比如 _ 或者 ign (ignore)。

代码示例:

>>> record = ('ACME', 50, 123.45, (12, 18, 2012)) >>> name, *_, (*_, year) = record
>>> name
'ACME'
>>> year 2012 >>>

在很多函数式语言中,星号解压语法跟列表处理有许多相似之处。比如,如果你有 一个列表,你可以很容易的将它分割成前后两部分:

>>> items = [1, 10, 7, 4, 5, 9] >>> head, *tail = items
>>> head
1
>>> tail
[10, 7, 4, 5, 9] >>>

还能用这种分割语法去巧妙的实现递归算法。比如:

>>> def sum(items):
... head, *tail = items
... return head + sum(tail) if tail else head ...
>>> sum(items)
36
>>>

然后,由于语言层面的限制,递归并不是 Python 擅长的。因此,最后那个递归演 示仅仅是个好奇的探索罢了,对这个不要太认真了。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月04日 0

暂无评论

推荐阅读
YQBUvtbFE7rq