Python基础09 赋值魔法
Python的赋值语句有一些使用窍门。
一、序列解包
序列解包:将一个序列解包,并将得到的值存储到一系列变量中。
>>> x, y, z = 1, 2, 3 >>> print(x, y, z) 1 2 3
>>> values = 1, 2, 3 >>> values (1, 2, 3) >>> x, y, z = values >>> print(x, y, z) 1 2 3
使用这种方式还可交换多个变量的值。
>>> x, y = y, x >>> print(x, y, z) 2 1 3
要解包的序列包含的元素个数必须与目标个数相同,否则将引发异常。
>>> x, y, z = 1, 2 Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: not enough values to unpack (expected 3, got 2) >>> x, y, z = 1, 2, 3, 4 Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: too many values to unpack (expected 3)
可使用星号运算符(*)来收集多余的值,这样无须确保值和变量的个数相同。
>>> x, y, *z = 1, 2, 3, 4
>>> z
[3, 4]
还可将带星号的变量放在其他位置。
>>> x, *y, z = 1, 2, 3, 4
>>> y
[2, 3]
二、链式赋值
链式赋值用于将多个变量关联到同一个值。
x = y = somefunction()
上述代码与下面的代码等价:
y = somefunction()
x = y
三、增强赋值
x = x + 1 可以写成 x += 1,这称为增强赋值。
增强赋值适用于所有标准运算符,如*、/、%等。
>>> x = 2
>>> x += 1 >>> x *= 2 >>> x /= 2 >>> x %= 2
增强赋值也可用于其他数据类型。
>>> x = 'py' >>> x += 'thon' >>> x *= 2