什麼是序列封包和序列解包
阿新 • • 發佈:2020-12-01
什麼是序列封包和序列解包
- 程式把多個值賦給一個變數時, Python會自動將多個值封裝成元組. 這種功能被稱為序列封包
- 程式允許將序列(元組或列表等)直接賦值給多個變數, 此時序列的各元素會被依次賦值給每個變數(要求序列的元素個數和變數個數相等), 這種功能被稱為序列解包
# 序列封包 vals = 10, 20, 30 print(vals) # (10, 20, 30) print(type(vals)) # <class 'tuple'> print(vals[1]) # 20 a_tuple = tuple(range(1, 10, 2)) print(a_tuple) # (1, 3, 5, 7, 9) a_list = ['fkit', 'crazyit'] # 序列解包 a, b, c, d, e = a_tuple print(a, b, c, d, e) # 1 3 5 7 9 a_str, b_str = a_list print(a_str, b_str) # fkit crazyit
如果在賦值中同時運用了序列封包和序列解包機制, 就可以讓賦值運算子支援同時將多個值賦值給多個變數. 如:
x, y, z = 10, 20, 30 print(x, y, z) # 10, 20, 30 # 相當於 xyz = 10, 20, 30 x, y, z = xyz print(x, y, z) # 10, 20, 30
在序列解包時也可以只解出部分變數, 剩下的依然使用列表變數儲存. 為了使用這種解包方式, Python允許在左邊賦值的變數之前新增 '*', 那麼該變數就代表一個列表, 可以儲存多個集合元素, 如:
# first, second儲存兩個元素, rest列表包含剩下的元素 first, second, *rest = range(10) print(first, second, rest) # last儲存最後一個元素, begin儲存前面的元素 *begin, last = range(10) print(begin, last) # first儲存第一個元素, middle儲存中間的元素, last儲存最後一個元素 first, *middle, last = range(10) print(first, middle, last)
0 1 [2, 3, 4, 5, 6, 7, 8, 9] [0, 1, 2, 3, 4, 5, 6, 7, 8] 9 0 [1, 2, 3, 4, 5, 6, 7, 8] 9