上几篇介绍了Python中的if 判断语句和while无限循环语句。这些语句都需要使用条件表达式来控制流程分支。而条件表达式的运算逻辑是由比较运算符提供的。所以本文开始介绍比较运算符。
比较运算符又称关系运算符。可用于数据之间的比较,通常的用法是比较两个数值的大小,但也可以用于比较字符串或对象的值是否相同。
字符串也可比较大小,这时比较的是字符串在计算机中的编码顺序,比如可能是ASCII(美国标准信息交换代码)或UTF-8编码。
比较运算符的返回值是bool型,即只有 True 和 False (真和假)两种可能的取值。
比较运算符列表Python中的比较运算符有以下7个:
运算符 | 功能 | 示例 |
== | 等于。比较对象是否相等 | 1 == 2 返回 False |
!= | 不等于。比较两个对象是否不相等 | 1 != 2 返回 True |
<> | 不等于。比较两个对象是否不相等。Python3 已废弃。这个运算符类似 != | 1 <> 2 返回 True |
> | 大于。 返回第一个对象是否大于第二个对象 | 1 > 2 返回 False |
< | 小于。返回第一个对象是否小于第二个对象 | 1 < 2 返回 True |
>= | 大于等于。返回第一个对象是否大于等于第二个对象 | 1 >= 2 返回 False |
<= | 小于等于。返回第一个对象是否小于等于第二个对象 | 1 <=2 返回 True |
其中<>在Python2中是合法的,但在Python3中这种用法会产生语法错误“SyntaxError: invaPython”。比如在Python2.7.16中,表达式“1<>2”返回True,而在Python3.10.4中运行结果是这样的:
取而代之,应该使用下面的形式:
当然,这种用法在Python2.7.16中也是允许的。所以在Python3中,可用的比较运算符其实只有6个,但在Python2中,这7个全部可用。
另一个需要注意的是,比较运算符两端可以有多余的空格(当然也可以没有),但是中间不能有空格((指两个符号的运算符==、!=、<>>、>=、<=),会产生语法错误“SyntaxError: invalid syntax”。下面是>=在Python3.10.4中的运行实例(第1个中间有空格,其余的在别的地方有空格):
其他两个符号组成的比较运算符也是如此。
等于比较运算符需要特别说明的比较运算符是等于比较运算符,因为一个等号已被用作最为重要的赋值运算符了,相对次要的等于比较操作就使用两个等于号表示,这是C系列语言的通用做法,C、C 、C#、Java、JavaScript等语言中均是如此。
不过在B系列语言中,比如Visual Basic、VBScript、按键精灵、易语言中,等于比较运算符和赋值运算符都使用一个等于号表示——系统根据表达式出现的位置自动判断是赋值运算符还是等于比较运算符。
B系列语言的赋值运算符没有返回值,所以可以根据是否需要返回值,来判断表达式中的等于号是比较运算符还是赋值运算符。
在C系列语言中,赋值运算符也是有返回值的,它返回赋值运算符右边的值,所以C系列语言中无法根据是否需要返回值来判断表达式中的等于号是比较运算符还是赋值运算符,这是赋值号与等于号使用两套不同符号的原因。
Python采用了C系列语言的赋值运算符和等于比较运算符不同的语法,但是它的赋值运算符和B系列语言一样,没有返回值:
注:Python是个另类,它的缩进机制是独树一帜,Python既不属于C系列语言,与B系列语言的区别也很大,可以归类于第三个系列语言。当然,还有第四、五等类语言。
最后,记述一下Python中的等于比较运算符的表示方法和示例。
两个等于号(==)可用于判断两个数值是否相等,也可判断两个字符串是否一样。
下面是判断两个字符串是否相等的实例:
相对于数值的比较大小来讲,字符串的比较规则要复杂一些。它的比较规则是这样的:
1、先比较字符串中的第1个字符的ASCII,ASCII较小的字符串较小,比如A的ASCII是65,B是66,所以A小于B,又因为a的ASCII为97,所以B小于a,注意大小写的不同,下面是示例:
2、如果第1个字符就不相等,不论哪一方后续还有没有字符,都会结束判断,字符串的整体大小由第一个字符串的大小决定,所以aa小于b、bb大于a:
3、如果第1字符相等,则比较下一个,不等就结束比较,相等就一直下一个,直到末尾,如果一方字符较小,则字符串值较小,比如bbc大于bba,也大于bb:
所有比较运算符的优先级都比逻辑运算符的要高。下面的示例中先计算小于号,再计算not:
下面的例子先计算两个比较运算符,最后再计算and逻辑与:
在大多数编程语言中,形如下面的使用类似数学中多个连续比较运算符的表达式是非法的,但在Python中是合法的:
大多数编程语言中只支持下列形式,Python也支持:
Python支持任意多个连续的比较运算符:
Python教程:第16篇 break 和 continue 语句
Python教程:第15篇 while 循环语句
Python教程:第14篇 for 循环语句
Python教程:第13篇 if 语句
Python教程:第12篇 流程控制结构
Python教程:第11篇 变量赋值