3.2 有趣的赋值操作
赋值操作是再简单不过了,在前面的章节也多次使用了赋值操作。不过Python语言中的赋值操作要有趣得多。例如,可以同时将多个值赋给多个变量。
x,y,z = 1,2,3
print(x,y,z)
1 2 3
在上面的代码块中,将1、2、3分别赋值给了x、y、z三个变量,并输出这三个变量的值。使用Python语言中的这个特性可以很容易实现两个变量中值的交换。
x,y = 20,30
x,y = y,x
print(x,y)
30 20
x,y,z = 1,2 这种同时将多个值赋给多个变量的操作,等号(=)左右两侧的变量名和变量个数必须相等,否则将抛出异常。
Python语言的这种特性称为序列解包(sequence unpacking),其实任何一个迭代(iterable)的对象都支持这一特性。关于迭代对象(列表、集合)的详细信息会在以后的章节介绍。
Python语言还支持链式赋值(chained assignments)和增量赋值(augmented assignments),链式赋值是指将同一个值连续赋给多个变量。
x = y = 20
增量赋值是指将变量自身增加或减小(负增量)指定值的表达式的简化形式。例如,x = x+2,如果用增量赋值表达式,可以写成x += 2,也就是将等号(=)右侧的x省略,并将加号(+)放到等号(=)左侧。例如:
x = 5
x += 2
print(x)
7
意思就是说,x的值是5,x += 2相当于,x = 5+2的值在赋值给x,最后输出x变量结果是7。
其实前面介绍的二元运算符都支持增量赋值,例如,x = x * 20可以写成x *= 20, x = x % 3 可以写成 x %= 3。
[例 3.2] 本例演示了序列解包、链式赋值和增量赋值的使用方法。
x,y,z = 1,2,3 #使用序列解包方式进行赋值
print(x,y,z)
x,y = y,x #利用序列解包交换x和y的值
print(x,y)
#x,y,z = 1,2 #抛出异常
#x,y = 1,2,3 #抛出异常
x = y = z = j = 20 #使用链式赋值设置x、y、z、j
print(x,y,z,j)
x *= 2 #乘法增量赋值
y %= 3 #除法负增量赋值
z -= 1 #减法负增量赋值
j += 1 #加法增量赋值
print(x,y,z,j)
输出结果:
1 2 3
2 1
20 20 20 20
40 2 19 21