Skip to content

Python 基本运算符

运算符是 Python 中执行操作的特殊符号或关键字。这些值称为操作数(operands)。

例如,在表达式 4 + 5 中,+ 是运算符(operator),而 4 和 5 是操作数。该表达式的值为 9。

Python 支持多种类型的运算符:

  • 算术运算符 (Arithmetic Operators)
  • 比较(关系)运算符 (Comparison (Relational) Operators)
  • 赋值运算符 (Assignment Operators)
  • 逻辑运算符 (Logical Operators)
  • 位运算符 (Bitwise Operators)
  • 成员运算符 (Membership Operators)
  • 身份运算符 (Identity Operators)

让我们来探讨每种类型。

这些运算符执行标准的数学计算。假设 a = 10 且 b = 20。

运算符描述示例 (a=10, b=20)
+ 加法对操作数的值进行相加。a + b 的结果是 30
- 减法从左操作数中减去右操作数。a - b 的结果是 -10
* 乘法对操作数的值进行相乘。a * b 的结果是 200
/ 除法用左操作数除以右操作数。结果始终是浮点数(float)。b / a 的结果是 2.0
% 取模返回除法的余数。b % a 的结果是 0。13 % a 的结果是 3。
** 幂运算左操作数求右操作数次幂。a ** 2 的结果是 100 (10 的 2 次幂)
// 整除执行除法并向下取整到最接近的整数。9 // 2 的结果是 4。9.0 // 2.0 的结果是 4.0。

这些运算符比较两个值,并返回布尔值(True 或 False)结果。它们也称为关系运算符。假设 a = 10 且 b = 20。

运算符描述示例 (a=10, b=20)
== 等于如果两个操作数相等,则返回 True。a == b 为 False。a == 10 为 True。
!= 不等于如果操作数不相等,则返回 True。a != b 为 True。a != 10 为 False。
> 大于如果左操作数大于右操作数,则返回 True。a > b 为 False。
< 小于如果左操作数小于右操作数,则返回 True。a < b 为 True。
>= 大于或等于如果左操作数大于或等于右操作数,则返回 True。a >= b 为 False。a >= 10 为 True。
<= 小于或等于如果左操作数小于或等于右操作数,则返回 True。a <= b 为 True。a <= 10 为 True。

注意:运算符 <> 在 Python 3 中已弃用;请改用 !=。

这些运算符用于给变量赋值,通常结合了算术运算和赋值操作。假设初始时 a = 10,b = 20,且 c = 0。

运算符描述示例 (a=10)
= 赋值将右操作数的值赋给左操作数。c = a + b 将 30 赋给 c。
+= 加并赋值将右操作数加到左操作数上,并将结果赋回给左操作数。c += a 等价于 c = c + a。如果 c 最初是 0,c 会变为 10。
-= 减并赋值从左操作数中减去右操作数,并将结果赋给左操作数。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。

位运算符将操作数视为二进制位序列(比特)进行操作。它们常用于低级别操作或优化。假设 a = 60 且 b = 13。

二进制表示:

`a = 60 -> 0011 1100`
`b = 13 -> 0000 1101`
运算符描述示例 (a=60, b=13)
& 按位与如果两个对应的位都是 1,则将该位设置为 1。a & b 的结果是 12 (0000 1100)
| 按位或如果对应的位中至少有一个是 1,则将该位设置为 1。a | b 的结果是 61 (0011 1101)
^ 按位异或如果对应的位中只有一个是 1,则将该位设置为 1。a ^ b 的结果是 49 (0011 0001)
~ 按位取反(补码)反转所有位(0 变 1,1 变 0)。应用于一个操作数。结果取决于数字表示方式(例如,带符号整数的补码)。~a 的结果是 -61。在典型的补码系统中,对于正整数,结果是 -(a + 1)。
<< 左移将左操作数的位向左移动由右操作数指定的位数。从右侧填充零。a << 2 的结果是 240 (1111 0000)
>> 右移将左操作数的位向右移动由右操作数指定的位数。从左侧填充符号位(算术右移)或零(逻辑右移 - Python 执行算术右移)。a >> 2 的结果是 15 (0000 1111)

这些运算符用于组合条件语句。假设 x = True 且 y = False。

运算符描述示例 (x=True, y=False)
and 逻辑与如果两个操作数都为真(True),则返回 True。x and y 的结果为 False。
or 逻辑或如果至少一个操作数为真(True),则返回 True。x or y 的结果为 True。
not 逻辑非如果操作数为假(False),则返回 True;如果操作数为真(True),则返回 False。not x 的结果为 False。not y 的结果为 True。

这些运算符测试序列(如字符串、列表、元组、集合、字典键)是否包含特定项。假设 my_list = [1, 2, 3]。

运算符描述示例 (my_list=[1, 2, 3])
in如果值/变量在序列中找到,则返回 True。2 in my_list 的结果为 True。
not in如果值/变量未在序列中找到,则返回 True。4 not in my_list 的结果为 True。

这些运算符比较两个对象的内存位置,检查它们是否引用完全相同的对象实例。假设 x = [1, 2],y = [1, 2],z = x。

运算符描述示例 (x=[1,2], y=[1,2], z=x)
is如果两个变量指向内存中的同一个对象,则返回 True。x is z 的结果为 True(z 引用与 x 相同的列表对象)。x is y 的结果为 False(x 和 y 是不同的列表对象,即使它们的内容相同)。
is not如果两个变量指向内存中的不同对象,则返回 True。x is not y 的结果为 True。x is not z 的结果为 False。

注意:is 用于身份比较(是否是同一个对象),== 用于相等性比较(值是否相同)。

当一个表达式包含多个运算符时,Python 会根据优先级以特定的顺序进行评估。优先级较高的运算符会先被评估。可以使用括号 () 来覆盖默认优先级。

下表列出了从最高优先级(顶部)到最低优先级(底部)的运算符:

运算符描述
()括号(分组)
f(args...), x[index], x[index:slice], x.attribute函数调用、下标 ([])、切片 ([:])、属性引用 (.attribute)
await xawait x 等待表达式
**** 幂运算(右结合)
+x, -x, ~x+x, -x, ~x 正号、负号、按位取反(一元运算符)
*, /, //, %*, /, //, % 乘法、除法、整除、取模
+, -+, - 加法和减法
<<, >><<, >> 位左移和右移
&& 按位与
^^ 按位异或
|| 按位或
in, not in, is, is not, <, <=, >, >=, !=, ==in, not in, is, is not, <, <=, >, >=, !=, == 比较运算符,包括成员测试和身份测试
not xnot x 逻辑非
andand 逻辑与
oror 逻辑或
if elseif else 条件表达式
lambdalambda Lambda 表达式
:=:= 赋值表达式(海象运算符)

理解运算符优先级有助于编写可预测且正确的代码。