运算符是编程语言中最基础的组成部分之一,掌握它们对于编写高效、简洁的代码至关重要。
目录
1. 算术运算符
算术运算符是我们最熟悉的运算符类型,用于执行基本的数学运算:
以下假设变量 a=10,变量 b=21:
运算符 | 描述 | 实例 |
---|---|---|
+ | 加 - 两个对象相加 | a + b 输出结果 31 |
- | 减 - 得到负数或是一个数减去另一个数 | a - b 输出结果 -11 |
* | 乘 - 两个数相乘或是返回一个被重复若干次的字符串 | a * b 输出结果 210 |
/ | 除 - x 除以 y | b / a 输出结果 2.1 |
% | 取模 - 返回除法的余数 | b % a 输出结果 1 |
** | 幂 - 返回x的y次幂 | a**b 为10的21次方 |
// | 取整除 - 往小的方向取整数 | >>> 9//2 4 >>> -9//2 -5 |
2. 比较(关系)运算符
比较运算符用于比较两个值,返回布尔值True或False:
以下假设变量 a 为 10,变量 b 为20:
运算符 | 描述 | 实例 |
---|---|---|
== | 等于 - 比较对象是否相等 | (a == b) 返回 False。 |
!= | 不等于 - 比较两个对象是否不相等 | (a != b) 返回 True。 |
> | 大于 - 返回x是否大于y | (a > b) 返回 False。 |
< | 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 | (a < b) 返回 True。 |
>= | 大于等于 - 返回x是否大于等于y。 | (a >= b) 返回 False。 |
<= | 小于等于 - 返回x是否小于等于y。 | (a <= b) 返回 True。 |
3. 赋值运算符
赋值运算符用于给变量赋值,还包括一些复合赋值运算:
以下假设变量a为10,变量b为20:
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符 | c = a + b 将 a + b 的运算结果赋值为 c |
+= | 加法赋值运算符 | c += a 等效于 c = c + a |
-= | 减法赋值运算符 | c -= a 等效于 c = c - a |
*= | 乘法赋值运算符 | c *= a 等效于 c = c * a |
/= | 除法赋值运算符 | c /= a 等效于 c = c / a |
%= | 取模赋值运算符 | c %= a 等效于 c = c % a |
**= | 幂赋值运算符 | c **= a 等效于 c = c ** a |
//= | 取整除赋值运算符 | c //= a 等效于 c = c // a |
:= | 海象运算符,这个运算符允许在表达式内部进行变量赋值,简化某些代码模式。。Python3.8 版本新增运算符。 | 传统写法: n = len(a) 使用海象运算符: if (n := len(a)) > 10: |
4. 逻辑运算符
逻辑运算符用于组合多个条件:
以下假设变量 a 为 10, b为 20:
运算符 | 逻辑表达式 | 描述 | 实例 |
---|---|---|---|
and | x and y | 布尔"与" - 如果 x 为 False,x and y 返回 x 的值,否则返回 y 的计算值。 | (a and b) 返回 20。 |
or | x or y | 布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。 | (a or b) 返回 10。 |
not | not x | 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 | not(a and b) 返回 False |
5. 位运算符
位运算符直接操作整数的二进制位:
下表中变量 a 为 60,b 为 13二进制格式如下:
a = 60 # 二进制: 0011 1100
b = 13 # 二进制: 0000 1101
# 按位与
print(a & b) # 12 (0000 1100)
# 按位或
print(a | b) # 61 (0011 1101)
# 按位异或
print(a ^ b) # 49 (0011 0001)
# 按位取反
print(~a) # -61 (1100 0011)
# 左移
print(a << 2) # 240 (1111 0000)
# 右移
print(a >> 2) # 15 (0000 1111)
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 |
| | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 | (a | b) 输出结果 61 ,二进制解释: 0011 1101 |
^ | 按位异或运算符:当两对应的二进位相异时,结果为1 | (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 |
~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1 | (~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。 |
<< | 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 | a << 2 输出结果 240 ,二进制解释: 1111 0000 |
>> | 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 |
6. 成员运算符
成员运算符用于测试序列中是否包含某个成员:
运算符 | 描述 | 实例 |
---|---|---|
in | 如果在指定的序列中找到值返回 True,否则返回 False。 | x 在 y 序列中 , 如果 x 在 y 序列中返回 True。 |
not in | 如果在指定的序列中没有找到值返回 True,否则返回 False。 | x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。 |
my_list = [1, 2, 3, 4, 5]
# in - 如果在序列中找到值返回True
print(3 in my_list) # True
# not in - 如果在序列中没有找到值返回True
print(6 not in my_list) # True
7. 身份运算符
身份运算符用于比较两个对象的内存位置:
运算符 | 描述 | 实例 |
---|---|---|
is | is 是判断两个标识符是不是引用自一个对象 | x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False |
is not | is not 是判断两个标识符是不是引用自不同对象 | x is not y , 类似 id(x) != id(y)。如果引用的不是同一个对象则返回结果 True,否则返回 False。 |
注:id()函数用于获取对象内存地址。
a = [1, 2, 3]
b = a
c = [1, 2, 3]
# is - 判断两个标识符是否引用同一个对象
print(a is b) # True
print(a is c) # False
# is not - 判断两个标识符是否引用不同对象
print(a is not c) # True
8. 运算符优先级
当表达式中有多个运算符时,Python会按照优先级顺序进行计算。以下是从高到低的优先级顺序:
运算符 | 描述 |
---|---|
| 圆括号的表达式 |
| 读取,切片,调用,属性引用 |
await x | await 表达式 |
| 乘方(指数) |
| 正,负,按位非 NOT |
| 乘,矩阵乘,除,整除,取余 |
| 加和减 |
| 移位 |
| 按位与 AND |
| 按位异或 XOR |
| 按位或 OR |
| 比较运算,包括成员检测和标识号检测 |
| 逻辑非 NOT |
| 逻辑与 AND |
| 逻辑或 OR |
| 条件表达式 |
| lambda 表达式 |
| 赋值表达式 |
# 示例
result = 10 + 3 * 2 ** 2 # 先计算2**2=4,然后3*4=12,最后10+12=22
print(result) # 输出: 22
注意:Python3 已不支持 <> 运算符,可以使用 != 代替