星号表达式在迭代元素为可变长元组的序列时是很有用的。 比如,下面是一个带有标签的元组序列:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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)
|
星号解压语法在字符串操作的时候也会很有用,比如字符串的分割。
1
2
3
4
5
6
7
8
9
|
>>> 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
1
2
3
4
5
6
7
|
>>> record = ('ACME', 50, 123.45, (12, 18, 2012))
>>> name, *_, (*_, year) = record
>>> name
'ACME'
>>> year
2012
>>>
|