
2.7 运算符和优先级
在Python语言中,支持的运算符包括算术运算符、比较运算符、赋值运算符、逻辑运算符、位运算符、成员运算符和身份运算符。
2.7.1 算术运算符
Python语言中常见的算术运算符如表2-1所示。
表2-1 算术运算符

【例2.6】使用算术运算符(代码2.5.py)。

保存并运行程序,结果如图2-18所示。

图2-18 程序运行结果
2.7.2 比较运算符
Python语言支持的比较运算符如表2-2所示。
表2-2 比较运算符

【例2.7】使用比较运算符(源代码2.6.py)。

保存并运行程序,结果如图2-19所示。

图2-19 程序运行结果
2.7.3 赋值运算符
赋值运算符表示将右边变量的值赋给左边变量,常见的赋值运算符的含义如表2-3所示。
表2-3 赋值运算符

【例2.8】使用赋值运算符(代码2.7.py)。

保存并运行程序,结果如图2-20所示。

图2-20 程序运行结果
2.7.4 逻辑运算符
Python支持的逻辑运算符如表2-4所示。
表2-4 逻辑运算符

【例2.9】使用逻辑运算符(代码2.8.py)。

保存并运行程序,结果如图2-21所示。

图2-21 程序运行结果
2.7.5 位运算符
在Python中,位运算符把数字看作二进制来进行计算。Python支持的位运算符如表2-5所示。
表2-5 位运算符

【例2.10】使用位运算符(代码2.9.py)。

保存并运行程序,结果如图2-22所示。

图2-22 程序运行结果
2.7.6 成员运算符
Python还支持成员运算符,测试实例中包含了一系列的成员,如字符串、列表、元组。成员运算符包括in和not in,x in y表示若x在y序列中则返回True;x not in y表示若x不在y序列中则返回True。
【例2.11】使用成员运算符(代码2.10.py)。

保存并运行程序,结果如图2-23所示。

图2-23 程序运行结果
2.7.7 身份运算符
Python支持身份运算符为is和not is。其中,is判断两个标识符是不是引用自一个对象;is not判断两个标识符是不是引用自不同对象。
【例2.12】使用身份运算符(代码2.11.py)。

保存并运行程序,结果如图2-24所示。

图2-24 程序运行结果
2.7.8 运算符的优先级
下面是Python的运算符,以处理顺序的先后排列。
(1)()、[]、{}。
(2)object。
(3)object[i]、object[1:r]、object.attribute、function()。
“.”符号用来存取对象的属性与方法。下面的示例调用对象t的append()方法,在对象t的结尾添加一个字符"t":
>>> t = ["P","a","r","r","o"] >>> t.append("t") >>> t ['P', 'a', 'r', 'r', 'o', 't']
(4)+x、-x、~x。
(5)x**y:x的y次方。
(6)x * y、x / y、x % y:x乘以y、x除以y、x除以y的余数。
(7)x + y、x – y:x加y、x减y。
(8)x << y、x >> y:x左移y位、x右移y位。例如:
>>> x = 4 >>> x << 2 16
(9)x & y:位AND运算符。
(10)x ^ y:位XOR运算符。
(11)x | y:位OR运算符。
(12)<、<=、>、>=、==、!=、<>、is、is not、in、not in。
in与not in运算符应用在列表(list)上。is运算符检查两个变量是否属于相同的对象。is not运算符则是检查两个变量是否不属于相同的对象。
!=与<>运算符是相同功能的运算符,都用来测试两个变量是否不相等。Python建议使用!=运算符,而不要使用<>运算符。
(13)not。
(14)and。
(15)or、lambda args:expr。
使用运算符时注意下面的事项:
① 除法应用在整数时,其结果会是一个浮点数。例如,8/4会等于2.0,而不是2。余数运算会将x / y所得的余数返回来,如7%4 =3。
② 如果将两个浮点数相除取余数的话,那么返回值也会是一个浮点数,计算方式是x –int(x / y) * y。例如:
>>>7.0 % 4.0 3.0
③ 比较运算符可以连在一起处理,如a < b < c < d,Python会将这个式子解释成a < b and b < c and c < d。像x < y > z也是有效的表达式。
④ 如果运算符(operator)两端的运算数(operand),其数据类型不相同,Python就会将其中一个运算数的数据类型转换为与另一个运算数一样的数据类型。转换顺序为:若有一个运算数是复数,则另一个运算数也会被转换为复数;若有一个运算数是浮点数,则另一个运算数也会被转换为浮点数。
⑤ Python有一个特殊的运算符—lambda。利用lambda运算符能够以表达式的方式创建一个匿名函数。lambda运算符的语法如下:
lambda args : expression
args是以逗号(,)隔开的参数列表list,而expression则是对这些参数进行运算的表达式。
例如:
>>>a=lambda x,y:x + y >>>print (a(3,4)) 7
x与y是a()函数的参数,a()函数的表达式是x+y。lambda运算符后只允许有一个表达式。要达到相同的功能也可以使用函数来定义a,如下所示:

【例2.13】运算符的优先级(源代码2.12.py)。

保存并运行程序,结果如图2-25所示。

图2-25 程序运行结果