一、同时(并行)给多个变量赋值:(序列解包或可迭代对象解包)
>>> x, y, z = 1, 2, 3
>>> print(x, y, z)
1 2 3
可用于交换多个变量的值
>>> x, y = y, x
>>> print(x, y, z)
2 1 3
序列解包,并将得到的值存储到一系列变量中:
>>> values = 1, 2, 3
>>> values
(1, 2, 3)
>>> x, y, z = values
>>> x
1
可使用星号运算符(*)来收集多余的值,这样无需确保值和变量的个数相同,如下例所示:
>>> a, b, *rest = [1, 2, 3, 4]
>>> rest
[3, 4]
还可将带星号的变量放在其他位置。
>>> name = "Albus Percival Wulfric Brian Dumbledore"
>>> first, *middle, last = name.split()
>>> middle
['Percival', 'Wulfric', 'Brian']
赋值语句的右边可以是任何类型的序列,但带星号的变量最终包含的总是一个列表。在变量
和值的个数相同时亦如此。
>>> a, *b, c = "abc"
>>> a, b, c
('a', ['b'], 'c')
二、链式赋值
x = y = somefunction()
上述代码与下面的代码等价:
y = somefunction()
x = y
请注意,这两条语句可能与下面的语句不等价:
x = somefunction()
y = somefunction()
三、增强赋值(好不容易有一点c++和java的影子,哎)
x += 1
等价于
x = x + 1