



|
2.5 运算符与表达式 |
Python的运算符号包括算术运算符、关系运算符和逻辑运算符。表达式是由数字或字符串和运算符组成的式子。表达式通常用于判断语句和循环语句的条件使用,表达式是学习控制语句编写的基础。本节将介绍Python中的各种表达式的使用。
算术运算符包括四则运算符、求模运算符和求幂运算符。Python中的算术运算符和表达式如表2-2所示。
表2-2 Python中的算术运算符和表达式
注意 与C、Java语言不同,Python不支持自增运算符和自减运算符。例如,i++、i--是错误的语法。
下面【例2-7】这段代码演示了Python中算术运算符的使用方法。
【例2-7.py】
01 print( "1 + 1 =", 1 + 1)
02 print ("2 - 1 =", 2 - 1)
03 print( "2 * 3 =", 2 * 3)
04 print ("4 / 2 =", 4 / 2)
05 print( "1 / 2 =", 1 / 2)
06 print ("1.0 / 2.0 =", 1.0 / 2.0)
07 print ("3 % 2 =", 3 % 2)
08 print ("2 ** 3 =", 2 ** 3)
【代码说明】
·第1行代码的输出结果:1+1=2
·第2行代码的输出结果:2-1=1
·第3行代码的输出结果:2*3=6
·第4行代码的输出结果:4/2=2
·第5行代码的输出结果:1/2=0.5
·第6行代码中的被除数是1.0,除数是2.0。Python把这两个数作为浮点型处理,因此相除后可以得到正确的结果。输出结果:1.0/2.0=0.5
·第7行代码中,求模的值为3除以2后的余数。输出结果:3%2=1
·第8行代码的输出结果:2**3=8
注意 Python2中执行“1/2”算术表达式的结果略有不同,Python2认为1和2是整型,相除后的结果会被截断,因此得到的值为0。
Python的算术表达式具有结合性和优先性。结合性是指表达式按照从左往右、先乘除后加减的原则。即从表达式的左边开始计算,先执行乘法和除法运算,再执行加法和减法运算。例如:
a + b * c % d
以上表达式先执行b*c,然后执行b*c%d,最后执行加法运算。
优先性是指先执行圆括号内的表达式,再按照结合性的原则进行计算。例如:
(a + b) * (c % d)
以上表达式先计算a+b的值,然后计算c%d的值,最后把两个值相乘。下面这段代码演示了算术运算的优先级。
01 # 算术运算的优先级
02 a = 1
03 b = 2
04 c = 3
05 d = 4
06 print ("a + b * c % d =", a + b * c % d)
07 print ("(a + b) * (c % d) =", (a + b) * (c % d))
第6行代码的输出结果:
a + b * c % d = 3
第7行代码的输出结果:
(a + b) * (c % d) = 9
关系运算符即对两个对象进行比较的符号。Python中的关系运算符和表达式如表2-3所示。
表2-3 Python中的关系运算符和表达式
下面这段代码演示了关系表达式的逻辑输出。
01 # 关系表达式 02 print (2 > 1) 03 print (1 <= 2) 04 print (1 == 2) 05 print (1 != 2)
【代码说明】
·第2行代码,2>1的逻辑正确。输出结果:True
·第3行代码,1<=2的逻辑正确。输出结果:True
·第4行代码,1==2的逻辑错误。输出结果:False
·第5行代码,1!=2的逻辑正确。输出结果:True
不同的关系运算符优先级别不同。其中<、<=、>、>=4个运算符的优先级别相等,==、!=的优先级别相等。而<、<=、>、>=的优先级别大于==、!=的优先级别。例如:a>=b==c等价于(a>=b)==c。
关系运算符的优先级低于算术运算符。下面的代码演示了关系运算符的优先级别。
01 # 关系表达式的优先级别
02 print( "1 + 2 < 3 - 1 =>", 1 + 2, "<", 3 - 1, "=>", 1 + 2 < 3 - 1)
03 print ("1 + 2 <= 3 > 5 % 2 =>", 1 + 2, "<=", 3, ">", 5 % 2, "=>", 1 + 2 <= 3 > 5 % 2)
【代码说明】
·第2行代码,先执行1+2=3,然后执行3–1=2,最后比较3<2。输出结果:
1 + 2 < 3 - 1 => 3 < 2 => False
·第3行代码,先执行1+2=3,然后执行5%2=1,最后比较3<=3>1。输出结果:
1 + 2 <= 3 > 5 % 2 => 3 <= 3 > 1 => True
逻辑表达式是用逻辑运算符和变量连接起来的式子。任何语言的逻辑运算符都只有3种——逻辑与、逻辑或和逻辑非。C、Java语言的逻辑运算符用 & & 、||、!表示,Python采用and、or、not表示。表2-4列出了Python中的逻辑运算符和表达式。
表2-4 Python中的逻辑运算符和表达式
下面的代码演示了逻辑表达式的运算。
01 # 逻辑运算符 02 print( not True) 03 print( False and True) 04 print (True and False) 05 print (True or False)
【代码说明】
·第2行代码,True的逻辑非为False。输出结果:False
·第3行代码,检测到and运算符左侧的False,就直接返回False。输出结果:False
·第4行代码,检测到and运算符左侧为True,然后继续检测右侧,右侧的值为False,于是返回False。输出结果:False
·第5行代码,or运算符的左侧为True,于是返回True。输出结果:True
逻辑非的优先级大于逻辑与和逻辑或的优先级,而逻辑与和逻辑或的优先级相等。逻辑运算符的优先级低于关系运算符,必须先计算关系运算符,然后再计算逻辑运算符。下面这段代码演示了逻辑运算符、关系运算符和算术运算符的优先级别。
01 # 逻辑表达式的优先级别
02 print( "not 1 and 0 =>", not 1 and 0)
03 print( "not (1 and 0) =>", not (1 and 0))
04 print ("(1 <= 2) and False or True =>", (1 <= 2) and False or True)
05 print ("(1 <= 2) or 1 > 1 + 2 =>", 1 <= 2, "or", 1 > 2, "=>", (1 <= 2) or (1 < 2))
【代码说明】
·第2行代码,先执行not 1,再执行and运算。输出结果:
not 1 and 0 => False
·第3行代码,先执行括号内的1 and 0,再执行not运算。输出结果:
not (1 and 0) => True
·第4行代码,先执行1<=2的关系运算表达式,再执行and运算,最后执行or运算。输出结果:
(1 <= 2) and False or True => True
·第5行代码,先执行1<=2的关系运算表达式,再执行表达式1>1+2,最后执行or运算。输出结果:
(1 <= 2) or 1 > 1 + 2 => True or False => True