Python程序设计基础
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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。