2.3.5 赋值、关系和逻辑运算
1.赋值运算符
赋值运算符用“=”表示,一般形式为:
变量=表达式
其左边只能是变量,而不能是常量或表达式。例如:5=x或5=2+3都是错误的。
注意,Python的赋值运算是没有返回值的。也就是说,赋值没有运算结果,只有效果—变量的值被改变了。
例如:
应注意的是,程序语句中的y=x不是数学中的方程等式,不代表y恒等于x。赋值只是一个瞬间动作。
除基本赋值外,赋值运算还包括序列赋值、多目标赋值和复合赋值(详见第3章)。
2.关系运算符
关系运算符也称为比较运算符,可以对两个数值型或字符串型数据进行大小比较,返回一个“真”或“假”的布尔值,见表2-7。
表2-7 关系运算符
一定要注意比较是否相等要用双等号“= =”,而不是“=”,这是初学者常犯的错误。
在比较过程中,遵循以下规则:
①若两个操作数是数值型,则按大小进行比较。
②若两个操作数是字符串型,则按“字典顺序”进行比较,即:首先取两个字符串的第1个字符进行比较,较大的字符所在字符串更大;如果相同,则再取两个字符串的第2个字符进行比较,其余类推。结果有三种情况:第一种,某次比较分出胜负,较大的字符所在字符串更大;第二种,始终不分胜负,并且两个字符串同时取完所有字符,那么这两个字符串相等;第三种,在分出胜负前,一个字符串已经取完所有字符,那么这个较短的字符串较小。第三种情况也可以认为是空字符和其他字符比较,空字符总是最小。
常用字符的大小关系为:空字符<空格< '0'~'9' < 'A'~'Z' < 'a'~'z' <汉字。
浮点数比较是否相等时要注意:因为有精度误差,可能产生本应相等但比较结果却不相等的情况。例如:
我们可以用两个浮点数的差距小于一个极小值来判定是否“应该相等”,这个“极小值”可以根据需要自行指定。例如:
注意:复数不能比较大小,只能比较是否相等。
Python允许x < y < z这样的链式比较,它相当于x < y and y < z。也可以用x < y > z,相当于x < y and y > z。
所有关系运算符的优先级相同。
3.逻辑运算符
逻辑运算符见表2-8。
表2-8 逻辑运算符
or是一个短路运算符,如果左操作数为True,则跳过右操作数的计算,直接得出结果为True。只有在左操作数为False时才会计算右操作数的值。
and也是一个短路运算符,如果左操作数为False,则跳过右操作数的计算,直接得出结果为False。只有在左操作数为True时,才会计算右操作数的值。
短路运算可以节省不必要的计算时间,而且Python会按照“最贪婪”的方式进行短路,以至于看上去违反了优先级次序。例如:
在这个例子中,b = = 2 and c = = 3整个被短路,并不会因为优先级高而先计算and。
证明方法是,把上面的例子改写成下面的形式:
函数equal()并没有被执行,说明equal(b,2) and equal(c,3)全都被短路了。
逻辑运算符的优先级,按照从低到高的顺序排列为:or < and < not。