2.2 运算符
前面我们介绍了数据类型与变量,变量是用来存储数据的,存储的数据是用于运算,运算就会使用到运算符。举个简单的例子:
4 + 5 = 9
在上例中,4和5被称为操作数,+被称为运算符。
Python支持以下几种运算符:
- 算术运算符
- 比较(关系)运算符
- 赋值运算符
- 逻辑运算符
- 位运算符
- 成员运算符
- 身份运算符
下面分别来介绍这些运算符。
2.2.1 算术运算符
算术运算符是对数值类型变量(包括整数、浮点数)进行数学计算的运算符,比如常见的加、减、乘、除等都属于这一类。Python中的算术运算符如表2.2所示。
表2.2 Python中的算术运算符
【范例程序2-1】算术运算符的使用范例
范例程序2-1的代码
以上代码使用算术运算符对两个数进行计算,并输出结果。其中,str()的作用是将数值转换为字符串,这样才能与前面的字符串部分合并再输出。把这段代码保存到程序文件2-1.py中,再执行该程序,结果如图2.2所示。
图2.2 使用Python算术运算符进行计算
2.2.2 比较运算符
比较运算符跟通常数学中的比较大小类似,用于比较两个数值或变量的相等、不等、大小等关系。Python中常用的比较运算符如表2.3所示。
表2.3 Python中的比较运算符
所有比较运算符的比较结果均返回布尔值True或False。比较运算符用于本章后续将要介绍的条件判断才有实际的意义,这里不再单独举例。
2.2.3 赋值运算符
赋值运算符用于对变量进行赋值。最常用的赋值运算是“=”,即“等号”这个符号,在Python中这个“=”和数学中等号的作用是有差别的,它的作用是将“=”右边的值赋给“=”左边的变量,赋值号“=”的左边只能是变量,不能是值或常数。注意:在后文中,在正常的情况下,都将赋值符号“=”称为赋值号或赋值运算符,不再不规范地称为“等号”。
除了最基本的赋值运算符之外,还可以在赋值号前加上各种算术运算符来组成复合赋值运算符。例如,+=、-=、*=、\=、%=、\\=、**=等,表示将复合赋值运算符右边的值与左边变量的值经过相应的数学运算再赋给左边的变量。
比如:
下面的范例程序演示了赋值运算符的具体执行结果。
【范例程序2-2】赋值运算符的使用范例
范例程序2-2的代码
以上代码中首先定义了两个变量a、b,然后将两个变量的和赋给变量c,再通过一系列赋值运算,其中的注释部分说明了经过赋值运算后值的变化。把这段代码保存到程序文件2-2.py中,执行该程序,结果如图2.3所示。
图2.3 使用Python赋值运算符进行赋值运算
2.2.4 逻辑运算符
Python中的逻辑运算符对布尔值True、False进行运算,其结果仍为布尔值。Python中的逻辑运算符包括and、or、not,分别为逻辑和、逻辑与、逻辑非。
- and:逻辑与,如果两个参与运算的布尔值均为True,就返回True;只要有一个布尔值为False,就返回False。
- or:逻辑或,只要两个参与运算的布尔值有一个为True,就返回True;只有两个布尔值均为False,才返回False。
- not:逻辑非,该运算符只对一个布尔值操作,如果参与运算的布尔值为True,就返回False;如果参与运算的布尔值为False,就返回True。
逻辑运算符的结果均为布尔值,而且逻辑运算符通常需要与条件判断语句配合使用,这里不再单独举例说明。
2.2.5 位运算符
位运算符是把两个操作数按二进制位对位进行运算,再返回结果。Python中的位运算符包括按位与、按位或、按位异或、按位取反、左移位、右移位等,具体如表2.4所示。
表2.4 Python中的位运算符
表2.4中的范例部分的位运算结果分别用图2.4~图2.9具体演示一下。
图2.4 “按位与”运算
图2.5 “按位或”运算
图2.6 “按位异或”运算
图2.7 “按位取反”运算
图2.8 “左移1位”运算
图2.9 “右移1位”运算
2.2.6 成员运算符
成员运算符用于判断某个值是否存在于字符串、列表、元组等指定对象中。有in与not in两个运算符:In,当成员存在于指定对象中时返回True,否则返回False;not in,当成员不存在于指定对象中时返回True,否则返回False。
【范例程序2-3】成员运算符的使用范例
范例程序2-3的代码
以上代码使用成员运算符判断指定字符是否存在于字符串中并输出结果。把这段代码保存到程序文件2-3.py中,执行该程序,结果如图2.10所示。
图2.10 使用Python成员运算符进行计算
2.2.7 身份运算符
除了以上介绍的几种运算符之外,Python中还有一类特殊的运算符:身份运算符。身份运算符用于比较两个对象的存储单元,有is与is not两个运算符。Is,两个变量引用自同一个对象则返回True,否则返回False。is not,两个变量引用自不同的对象时,返回True,否则返回False。
注意,is与==是不同的,is用于判断两个变量引用对象是否为同一个,而==用于判断引用变量的值是否相等。
2.2.8 运算符的优先级
前面几节介绍了Python中的几类运算符,而这些运算符都有着特定的优先级,在实际使用中,运算符将按照优先级高低顺序决定运算的先后顺序。首先进行优先级高的运算符的运算,然后对优先级次高的运算符进行运算,以此类推。
Python中运算符的优先级顺序如表2.5所示。
表2.5 Python中的运算符优先级
在实际应用中,为了避免优先级混乱,建议使用括号。这样可以确保先运算括号内的表达式,再运算括号外的表达式。再复杂的情况可以考虑使用多层括号,最内层的括号先运算。