运算符 Operator 及优先级
在编程语言中,运算符是进行各种数学、逻辑、比较等运算的符号。掌握不同类型运算符及其优先级对于编写高效并正确执行的代码至关重要。
1.算术运算符
算术运算符包括加(+)、减(-)、乘(*)、除(/)及取模(%)等运算符。它们用于数学计算,在 Python 中算术运算符的优先级由高到低依次是:
幂运算 **
正负号 +x, -x
乘、除、取模 * / %
加、减 + -
需要注意的是,Python 中除法运算符 / 在计算时会默认转换为浮点数,若需要返回整数结果则需使用双斜线 // 进行整除运算。此外,取模运算符 % 可以用于求解数值之间的余数。
a = 10
b = 3
c = a // b # 返回整除结果
d = a % b # 返回除法余数
在多个算术运算符同时出现时,Python 会根据优先级依次执行,若出现同一优先级运算符则依据左右结合规则确定计算顺序。
a = 2 + 3 * 4 # 先计算乘法再计算加法,结果为14
b = (2 + 3) * 4 # 先计算括号内的加法再计算乘法,结果为20
2.比较运算符
比较运算符用于对变量或数值进行比较,结果返回布尔值 True 或 False。Python 中比较运算符的优先级同为非连续型运算符。比较运算符包括:
运算符 | 含义 |
---|---|
== | 等于 |
!= | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
需要注意的是,比较运算符可以对整型、浮点型、字符串等类型的变量进行运算,但不同类型的变量之间不能直接执行比较运算。
a = 5
b = 10
c = 'apple'
print(a < b) # 输出True
print(c < b) # TypeError: '<' not supported between instances of 'str' and 'int'
3.逻辑运算符
逻辑运算符常用于判断语句中,用于对多个条件进行逻辑判断。Python 中逻辑运算符的优先级同样非连续,包括:
运算符 | 含义 |
---|---|
and | 与,同时成立 |
or | 或,至少一个成立 |
not | 非,取反 |
3.1 and 运算符
and 运算符表示同时满足多个条件时才返回 True,如果存在一个条件不满足则返回 False。若存在多个 and 运算符同时出现,则按照从左至右的顺序逐一进行运算。
a = 5
b = 10
c = 3
d = 7
print(a
print(ad) # 输出False
3.2 or 运算符
or 运算符表示至少有一个条件满足时返回 True,如果所有条件都不满足则返回 False。
a = 5
b = 10
c = 3
d = 7
print(ad) # 输出True
print(a>c or c>d) # 输出False
3.3 not 运算符
not 运算符表示对条件取反,如果条件为 False 则返回 True,反之亦然。
a = 5
b = 10
print(not a
print(not a>b) # 输出True
4.位运算符
位运算符用于对数字在二进制下的位进行操作,通过按位与、按位或、按位异或、左移和右移等操作对数字的二进制数进行处理,从而实现不同的效果。
4.1 按位与 &
按位与运算符 & 对两个数值的二进制位进行逐位比较,如果两个二进制位均为 1 则返回 1,否则返回 0。
a = 5 # 二进制数为 101
b = 3 # 二进制数为 011
c = a & b # 二进制数为 001,即1
4.2 按位或 |
按位或运算符 | 同样对两个数值的二进制位进行逐位比较,如果两个二进制位中有一个为 1 则返回 1,否则返回 0。
a = 5 # 二进制数为 101
b = 3 # 二进制数为 011
c = a | b # 二进制数为 111,即7
4.3 按位异或 ^
按位异或运算符 ^ 同样比较两个数值的二进制位,如果两个二进制位的值不同则返回 1,否则返回 0。
a = 5 # 二进制数为 101
b = 3 # 二进制数为 011
c = a ^ b # 二进制数为 110,即6
4.4 左移运算符 <<
左移运算符 << 将一个数值的二进制表示向左移动指定的位数,则在数值的末尾插入相应数量的零。
a = 5 # 二进制数为 101
b = a << 2 # 二进制数为 10100,即20
4.5 右移运算符 >>
右移运算符 >> 将一个数值的二进制表示向右移动指定的位数,则在数值的开头插入相应数量的零或一。
a = 5 # 二进制数为 101
b = a >> 1 # 二进制数为 10,即2
5.赋值运算符
赋值运算符用于将一个数值或表达式的结果赋值给一个变量。Python 提供了多种不同的赋值运算符,例如:
运算符 | 含义 |
---|---|
= | 将右侧结果赋值给左侧变量 |
+= | 将右侧结果加上左侧变量的值再赋值给左侧变量 |
-= | 将左侧变量的值减去右侧结果再赋值给左侧变量 |
*= | 将左侧变量的值与右侧结果相乘再赋值给左侧变量 |
/= | 将左侧变量的值除以右侧结果再赋值给左侧变量 |
//= | 将左侧变量的值整除右侧结果再赋值给左侧变量 |
需要注意的是,赋值运算符优先级最低,因此在 Python 代码中执行的顺序也是从右至左逐一执行。
a = 5
a += 3 # 等价于 a = a + 3
a *= 2 # 等价于 a = a * 2
6.成员运算符
成员运算符用于判断是否存在于某个序列或集合中,包括 in 运算符和 not in 运算符。
a = [1, 2, 3]
b = 2
c = 4
print(b in a) # 输出True
print(c in a) # 输出False
7.身份运算符
身份运算符用于比较两个对象是否具有相同的内存地址。Python 中身份运算符包括 is 运算符和 is not 运算符。
a = [1, 2, 3]
b = [1, 2, 3]
c = a
print(a is b) # 输出False
print(a is c) # 输出True
结论
Python 中提供了多种运算符,每种运算符都有不同的优先级,需要根据需要灵活使用。同时,需要注意不同类型变量之间进行运算时会引发 TypeError 异常,因此需要仔细检查数据类型的正确性。