Python-9-赋值进阶
1.序列解包
同时给多个变量赋值
>>> 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
在使用返回序列的函数时有用
>>> scoundrel = {'name': 'Robin', 'girlfriend': 'Marion'}
>>> key, value = scoundrel.popitem()
>>> key
'girlfriend'
>>> value
'Marion
注意左右个数必须相同,否则会报错
>>> x, y, z = 1, 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 2 values to unpack
可使用星号运算符(*)来收集多余的值,这样无需确保值和变量的个数相同:
>>> 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']
2.链式赋值
x = y = somefunction()
与以下代码等价
y = somefunction()
x = y
与以下代码不等价
x = somefunction()
y = somefunction()
3.增强赋值
x = x + 1 等价于 x += 1 适用于所有标准运算符