1. 程式人生 > >Python3中的擴充套件序列解包

Python3中的擴充套件序列解包

在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引進的序列解包還是很有用的。