1. 程式人生 > 實用技巧 >什麼是序列封包和序列解包

什麼是序列封包和序列解包

什麼是序列封包和序列解包

  • 程式把多個值賦給一個變數時, 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