10-序列解包

https://blog.csdn.net/yilovexing/article/details/80576788

序列解包是 python3 的语法糖,可以批量进行复制或者解包(序列解包是 Python 3.0 之后才有的语法)

本质上,python 变量存储的不是值,而是内存地址。这个操作是把引用的内存地址直接交换。

这种方法并不限于列表和元组,而是适用于任意序列类型(甚至包括字符串和字节序列)。只要赋值运算符左边的变量数目与序列中的元素数目相等,你都可以用这种方法将元素序列解包到另一组变量中。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 简单赋值
x, y = 1, 2

# x, y 调换顺序
x, y = y, x

# 斐波那契数列中求和
x, y = y, x + y

# 获取剩余部分(*表示)
x, y, *z = 1, 2, 3, 4, 5 # z [3, 4, 5]
x, *y, z = 1, 2, 3, 4, 5 # y [2, 3, 4]
x, *y, z = 1, 2 # x 是1,z 是2, y是空列表

复杂情况

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
(a, b), (c, d) = (1, 2), (3, 4)

s = 'ABCDEFG'
while s:
  x, *s = s
  print(x, s)
  
# result 
A ['B', 'C', 'D', 'E', 'F', 'G', 'H']
B ['C', 'D', 'E', 'F', 'G', 'H']
C ['D', 'E', 'F', 'G', 'H']
D ['E', 'F', 'G', 'H']
E ['F', 'G', 'H']
F ['G', 'H']
G ['H']
H []