序列解包是Python特有的语法,它将一个序列(或任何可迭代对象)解开,并将得到的值存储到一系列变量中。
>>> x, y, z = 1, 2, 3
>>> print(x, y, z)
1 2 3
一个有趣的例子是,利用序列解包实现交换两个或多个变量的值:
>>> x = 1
>>> y = 2
>>> x, y = y, x
>>> print(x, y)
2 1
>>>
一个常见的应用场合:一个函数或方法返回一个元组(或序列多其他可迭代对象),这时可以直接使用一组变量承接返回值。例如把字典的popitem
方法的返回值解包到key、value两个便里中:
>>> scoundrel = {'name': 'Robin', 'girlfriend': 'Marion'}
>>> key, value = scoundrel.popitem()
>>> key
'girlfriend'
>>> value
'Marion'
需要格外注意的是:解包的序列包含的元素个数必须与你在等号左边列出的目标个数相同,否则Python将引发异常。
然而一个方法或函数返回序列时,其长度通常是不可预测的,又或许我们只关系其中的某些值,这时可以使用通配符()来接收多余的值。*
>>> a, b, *rest = (1, 2, 3, 4) # 使用*rest接收多余的值
>>> rest
[3, 4]
>>>
>>> a, *rest, b = [1, 2, 3, 4] # *rest放在中间
>>> rest
[2, 3]
>>>
>>> a, *rest, b = [1, 4] # 序列没有足够的值
>>> rest
[]
- 带星号的变量被赋予一个列表,包含了序列其他所有的值。
- 带星号的变量可以出现在任意位置,不一定在末尾。
- 当序列长度不足时,带星号变量被赋予一个空列表。
网友评论