2.2 Python运算符和优先级
与其他程序语言类似,Python编程中也会涉及运算问题,这样就会用到运算符。本节介绍Python常见的运算符,希望读者掌握它们的含义及用法。
2.2.1 Python运算符
Python运算符用于执行各种算术、逻辑和其他类型的计算,以下是Python编程中常用的运算符。
1.算术运算符
常用的算术运算符有+(加)、−(减)、*(乘)、/(除)、%(取模)、**(幂),//(整数除法)。下面就%、**、//运算符举例说明。
· %运算符:%运算符用来计算两个数相除后的余数,例如x % y表示x除以y后的余数。下面是几个示例:
7 % 3 = 1 10 % 5 = 0 12 % 7 = 5
· **运算符:**运算符是用来计算一个数的指数次幂,例如x ** b表示x的y次幂。下面是几个示例:
3 ** 3 = 27 7 ** 2 = 49 4 ** 3 = 64
· //运算符://运算符用来计算两个数相除后的整数部分,例如x //y表示x除以y后的整数部分。下面是几个示例:
7 // 3 = 2 20 // 5 = 4 11 //87 = 1
需要注意的是,整数除法得到的结果可能会向下取整,因为它只计算商的整数部分,小数部分会被舍去。
2.比较运算符
常用的比较运算符有>(大于)、<(小于)、==(等于)、!=(不等于)、>=(大于或等于)、<=(小于或等于)。
3.逻辑运算符
常用的逻辑运算符有and(与)、or(或)、not(非)。
· and运算符:当两个表达式都是True时,它返回True;否则返回False。下面是几个示例:
True and True # True True and False # False False and False # False
· or运算符:当两个表达式至少有一个是True时,它返回True;否则返回False。下面是几个示例:
True or True # True True or False # True False or False # False
· not运算符:将表达式的值进行取反,如果原始值为True,则返回False;如果原始值为False,则返回True。下面是几个示例:
not True # False not False # True
这些逻辑运算符在编程中非常有用,可以用于控制语句中的条件判断,比如if语句中的条件判断。
4.位运算符
常用的位运算符有&(按位与)、|(按位或)、^(按位异或)、~(按位取反)、<<(左移位)、>>(右移位)。
位运算符是一种在二进制数位上进行操作的运算符。下面是位运算符的解释。
· &运算符:两个位都为1时,结果才为1,否则为0。
x = 5 # 二进制数为 101 y = 3 # 二进制数为 011 print(x & y) # 输出:1 (二进制为001)
· |运算符:其中一位为1时,结果就为1,否则为0。
x = 5 # 二进制数为 101 y = 3 # 二进制数为 011 print(x |y) # 输出:7 (二进制为111)
· ^运算符:如果两个数相应位的值不同,则该位的结果为1,否则为0。
x = 5 # 二进制数为 101 y = 3 # 二进制数为 011 print(x ^ y) # 输出:6 (二进制为110)
· ~运算符:结果将二进制数的所有位取反,即0变1,1变0。
x = 5 # 二进制数为 101 print(~x) # 输出:-6
因为Python的二进制表示使用了补码,所以~x对应的二进制数为010(补码表示),即十进制数为2,然后将其取反为101,再转换成补码表示,即−6。
· <<运算符:操作数的各二进位全部左移若干位,相当于此数乘以2的移动次方。
x = 5 # 二进制数为 101 print(x << 2) # 输出: 20 (二进制数为10100)
将二进制数101左移两位得到二进制数10100,即十进制数20。
· >>运算符:操作数的各二进位全部右移若干位,相当于此数除以2的移动次方。
x = 20 # 二进制数为 10100 print(x >> 2) # 输出: 5(二进制数为101)
将二进制数10100右移两位得到二进制数101,即十进制数5。
5.赋值运算符
赋值运算符用于给变量赋值。它们实现了将右侧操作数应用于左侧操作数并将结果分配给左侧操作数的功能。常用的位运算符有=(赋值)、+=(加等于)、−=(减等于)、*=(乘等于)、/=(除等于)、%=(取模等于)、**=(幂等于)、//=(取整除等于)、&=(按位与等于)、|=(按位或等于)、^=(按位异或等于)、>>=(右移等于)、<<=(左移等于)。
· =运算符:将右侧操作数的值赋给左侧操作数。
· +=运算符:等同于x = x + y。
· −=运算符:等同于x = x − y。
· *=运算符:等同于x = x * y。
· /=运算符:等同于x = x / y。
· %=运算符:等同于x = x % y。
· **=运算符:等同于x = x ** y。
· //=运算符:等同于x = x // y。
· &=运算符:等同于x = x & y。
· |=运算符:等同于x = x | y。
· ^=运算符:等同于x = x ^ y。
· >>=运算符:等同于x = x >> y。
· <<=运算符:等同于x = x << y。
6.条件运算符
条件运算符用于根据一个或多个条件对程序执行不同的代码块。Python中常见的条件运算符有if-else和if-elif-else。
1)if-else
该语句根据给定条件来执行代码块。如果条件为True,则执行if子句,并跳过else子句;如果条件为False,则执行else子句。示例如下:
x = 10 if x > 5: print("x 大于 5") else: print("x 小于或等于 5")
以上示例输出x大于5。
2)if-elif-else
该语句包含多个条件,并在每个条件为False(所有条件为False)时提供一个备选行动方案。示例如下:
x = 10 if x == 5: print("x 等于 5") elif x >5 and x <= 10: print("x 大于 5,小于或等于 10") else: print("x 大于 10")
在上面的示例代码中,如果x等于5,那么将会输出“x等于5”。如果x大于5且小于或等于10,那么将输出“x大于5,小于或等于10”。如果x大于10,那么将输出“x大于10”。同时需要注意的是,if-elif-else语句是可以嵌套的。
7.成员运算符
成员运算符in和not in用于检查一个值是否存在于某个序列中,即检查值是不是该序列的元素。
1)in运算符
若指定的值在序列中找到,则返回True,否则返回False。示例如下:
fruits = ["apple", "banana", "cherry"] if "apple" in fruits: print("apple 在水果列表中") else: print("apple 不在水果列表中")
2)not in运算符
若指定的值不存在于序列中,则返回True,否则返回False。示例如下:
fruits = ["apple", "banana", "cherry"] if "orange" not in fruits: print("orange 不在水果列表中") else: print("orange 在水果列表中")
在上面的示例中,in运算符用于检查列表fruits中是否包含字符串"apple",结果为True,因此输出"apple在水果列表中"。而not in运算符则用于检查字符串"orange"是否不存在于列表fruits中,结果为True,所以输出"orange不在水果列表中"。
8.身份运算符
身份运算符is和is not用于比较两个对象的内存地址,即判断两个对象是不是同一个对象。
1)is运算符
若两个对象的内存地址相同,则返回True,否则返回False。示例如下:
x = ["apple", "banana", "cherry"] y = ["apple", "banana", "cherry"] z = x if x is z: print("x 和 z 是同一个对象") else: print("x 和 z 不是同一个对象") if x is y: print("x 和 y 是同一个对象") else: print("x 和 y 不是同一个对象")
在上面的示例中,我们首先定义了两个列表x和y,它们包含相同的元素。然后我们将x赋值给变量z。因为z和x引用的是同一个列表对象,所以x is z的结果为True。但是x和y引用的是不同的列表对象,所以x is y的结果为False。
2)is not运算符
若两个对象的内存地址不同,则返回True,否则返回False。示例如下:
x = ["apple", "banana", "cherry"] y = ["apple", "banana", "cherry"] z = x if x is not z: print("x 和 z 不是同一个对象") else: print("x 和 z 是同一个对象") if x is not y: print("x 和 y 不是同一个对象") else: print("x 和 y 是同一个对象")
在上面的示例中,is not和is的作用是相反的。因为z和x引用的是同一个列表对象,所以x is not z的结果为False。但是x和y引用的是不同的列表对象,所以x is not y的结果为True。
2.2.2 运算符的优先级
Python运算符是一些用于执行各种算术和逻辑操作的特殊符号。通常,Python中的运算符及其优先级有以下特点:
· 一元操作符优先级最高,例如正号和负号。
· 先乘除,后加减,例如乘号和除号的优先级高于加号和减号。
· 同级运算符从左到右计算。
当然,代码中可以使用圆括号“()”来调整计算的优先级,在具体计算时可以改变运算符的优先级。
Python中的运算符优先级从高到低依次为:
以下举例说明。
(1)加号和减号:
x = 5 y = 3 print(x + y) # 输出:8 print(x - y) # 输出:2
(2)乘号和除号:
x = 6 y = 3 print(x * y) # 输出:18 print(x / y) # 输出:2.0
(3)取模运算:
x = 7 y = 3 print(x % y) # 输出:1
(4)乘方运算:
x = 2 y = 3 print(x ** y) # 输出:8
(5)比较运算符:
x = 5 y = 3 print(x > y) # 输出:True print(x < y) # 输出:False print(x == y) # 输出:False
(6)逻辑运算符:
x = 5 y = 3 print(x > 3 and y < 6) # 输出:True print(x > 3 or y > 6) # 输出:True print(not(x > 3)) # 输出:False