在Python中的一般的赋值语句格式如下:
>>> spam = 'Spam' # 基本赋值形式
>>> spam, ham = 'Spam', 'Hum' # 元祖赋值形式
>>> [spam, ham] = ['Spam', 'Hum'] # 列表赋值形式
>>> a, b, c, d = 'spam' # 序列赋值形式
>>> spam = ham = 'lunch' # 多目标赋值形式
>>> spams = 10; spams += 1 # 增强型赋值形式
Python3以来,就有扩展的序列解包,具体示例:
>>> a, *b = [1, 2, 3, 4] # a负责接收1,余下的全赋值给b
>>> a, b
(1, [2, 3, 4])
>>> a, *b, c = (1, 2, 3, 4) # 位置可以在中间
>>> a, b, c
(1, [2, 3], 4)
>>> a, b, *c = "SPAM" # 也可以在后,整个为列表
>>> a, b, c
('S', 'P', ['A', 'M'])
>>> a, *b = {"A": 1, "B": 2, "C": 3} # 如果是字典,同样为列表
>>> a, b
('A', ['B', 'C'])
>>> a, b, *c = "SB" # 如果不够话,则为空列表
>>> a, b, c
('S', 'B', [])
几个其它小示例:
>>> # 示例一: for循环遍历中解包的应用
>>> for (a, *b, c) in [(1,2,3,4), (5,6,7,8)]:
... print(a, b, c)
...
1 [2, 3] 4
5 [6, 7] 8
>>> # 示例二: 未使用序列解包的一个用例
>>> L = [1, 2, 3, 4, 5]
>>> while L:
... front, L = L[0], L[1:]
... print(front,"->",L)
...
1 -> [2, 3, 4, 5]
2 -> [3, 4, 5]
3 -> [4, 5]
4 -> [5]
5 -> []
>>> # 示例三: 使用序列解包的一个用例
>>> L = [1, 2, 3, 4, 5]
>>> while L:
... front,*L = L
... print(front,"->",L)
...
1 -> [2, 3, 4, 5]
2 -> [3, 4, 5]
3 -> [4, 5]
4 -> [5]
5 -> []
>>>
从上面的示例来看, Python3.0引进的序列解包还是很有用的。