在 Python 编程的世界里,运算符就像 “魔法积木”,能将变量、常量等 “零件” 组合起来,实现数据计算、逻辑判断、赋值等各种核心功能。无论是简单的数值相加,还是复杂的条件筛选,都离不开运算符的支撑。本文将从基础到进阶,系统梳理 Python 中常用的运算符,帮你彻底掌握这一核心知识点。

一、赋值运算符:给变量 “赋予生命”

赋值运算符是 Python 中最基础也最常用的运算符,作用是将右侧的值或表达式结果,赋给左侧的变量。它就像给变量 “贴上标签”,让变量拥有具体的 “身份”。

1. 基础赋值:=

这是最核心的赋值运算符,注意与数学中的 “等于” 区分,在 Python 中它表示 “赋值” 动作,而非判断相等。

# 给变量 a 赋值为 10
a = 10
# 将表达式 3*5 的结果赋给变量 b
b = 3 * 5
print(a)  # 输出:10
print(b)  # 输出:15

2. 复合赋值:+=-=*= 等

当需要对变量进行 “先运算,再赋值” 的操作时,复合赋值运算符能让代码更简洁。它本质是 “变量 = 变量 运算符 数值” 的简写形式。
常见复合赋值运算符及示例如下:

运算符 含义 示例 等价写法
+= 加法赋值 x += 3 x = x + 3
-= 减法赋值 x -= 2 x = x - 2
*= 乘法赋值 x *= 4 x = x * 4
/= 除法赋值 x /= 2 x = x / 2
//= 整除赋值 x //= 3 x = x // 3
%= 取余赋值 x %= 5 x = x % 5
**= 幂运算赋值 x **= 2 x = x ** 2
x = 5
x += 3  # 等价于 x = 5 + 3
print(x)  # 输出:8

x *= 2  # 等价于 x = 8 * 2
print(x)  # 输出:16

x %= 3  # 等价于 x = 16 % 3(16除以3余1)
print(x)  # 输出:1

二、算术运算符:实现数值 “加减乘除”

算术运算符用于对数值类型(整数 int、浮点数 float 等)进行数学运算,是处理数值计算的核心工具。

1. 基本算术运算符

包括加、减、乘、除等,与数学中的运算逻辑基本一致,但需注意除法的特殊性。

运算符 名称 示例 结果
+ 加法 3 + 5 8
- 减法 10 - 4 6
* 乘法 2 * 6 12
/ 除法 15 / 2 7.5结果必为浮点数
// 整除 15 // 2 7向下取整,忽略小数部分)
% 取余(模运算) 15 % 2 1(返回除法后的余数)
** 幂运算 2 ** 3 8(2 的 3 次方,等价于 pow(2,3)

2. 关键注意点

  • 除法 /:无论是否能整除,结果都为浮点数。例如 4 / 2 结果是 2.0,而非 2
  • 整除 //:向下取整规则对负数同样生效。例如 7 // 3 = 2,但 -7 // 3 = -3(因为 -3 比 -2.333 更小)。
  • 取余 %:结果的符号与除数一致。例如 7 % 3 = 17 % (-3) = -2-7 % 3 = 2

示例代码:

# 除法与整除的区别
print(10 / 3)   # 输出:3.3333333333333335
print(10 // 3)  # 输出:3

# 负数的整除与取余
print(-10 // 3)  # 输出:-4(向下取整)
print(10 % (-3)) # 输出:-2(与除数-3符号一致)

# 幂运算
print(3 ** 4)    # 输出:81(3*3*3*3)
print(4 ** 0.5)  # 输出:2.0(开平方,等价于 math.sqrt(4))

三、比较运算符:判断 “是与非”

比较运算符用于比较两个值的关系,结果始终是布尔值(True 表示 “成立”,False 表示 “不成立”)。它常与条件语句(if)、循环语句(while)搭配使用,是实现逻辑分支的基础。

1. 常用比较运算符

运算符 名称 示例 结果
== 等于 5 == 5 True
!= 不等于 5 != 3 True
> 大于 7 > 10 False
< 小于 2 < 4 True
>= 大于等于 6 >= 6 True
<= 小于等于 8 <= 5 False

2. 实用技巧:连续比较

Python 支持 “连续比较”,无需像其他语言那样用逻辑运算符连接,代码更简洁。例如:

x = 5
# 判断 x 是否在 3 到 10 之间
print(3 < x < 10)  # 输出:True,等价于 3 < x and x < 10

y = 12
print(5 <= y <= 10)  # 输出:False

3. 注意:== 与 is 的区别

  • ==:比较的是值是否相等,只要两个对象的 “内容” 一致,结果就为 True
  • is:比较的是内存地址是否相同(即是否为同一个对象),与值无关。

示例:        

a = [1, 2, 3]
b = [1, 2, 3]
print(a == b)  # 输出:True(值相等)
print(a is b)  # 输出:False(a和b是两个不同的列表对象,内存地址不同)

c = a
print(a is c)  # 输出:True(c指向a的内存地址,是同一个对象)

四、逻辑运算符:组合 “条件判断”

逻辑运算符用于连接多个布尔值(或可转换为布尔值的表达式),实现更复杂的逻辑判断。Python 中的逻辑运算符有 and(与)、or(或)、not(非)三种,遵循 “短路求值” 规则。

1. 逻辑运算符规则

运算符 名称 逻辑规则 短路特性
and 逻辑与 所有条件都为 True,结果才为 True;只要有一个为 False,结果为 False 左侧为 False 时,右侧不再计算
or 逻辑或 只要有一个条件为 True,结果就为 True;所有条件为 False,结果才为 False 左侧为 True 时,右侧不再计算
not 逻辑非 对条件取反,True 变 FalseFalse 变 True 无短路,直接取反

2. 短路求值示例

短路求值能提高代码效率,避免不必要的计算:

python

运行

# and 短路:左侧为False,右侧的 1/0(会报错)不会执行
print(False and (1 / 0))  # 输出:False(无报错)

# or 短路:左侧为True,右侧的 1/0 不会执行
print(True or (1 / 0))   # 输出:True(无报错)

# not 无短路
print(not (5 > 3))  # 输出:False(先计算 5>3 为True,再取反)

3. 布尔值转换

除了直接使用布尔值,Python 中所有数据类型都能通过 “真值测试” 转换为布尔值:

  • 视为 False 的值:00.0""(空字符串)、[](空列表)、{}(空字典)、None 等。
  • 视为 True 的值:非零数值、非空字符串 / 列表 / 字典等。

示例:

python

运行

# 空列表视为False,非空字符串视为True
print([] and "hello")  # 输出:[](and 结果取第一个False值)
print(0 or [1,2])      # 输出:[1,2](or 结果取第一个True值)
print(not "")          # 输出:True(空字符串视为False,取反后为True)

五、位运算符:直接操作 “二进制位”

位运算符直接对整数的二进制位(0 和 1)进行操作,常用于底层开发、性能优化(如权限控制、状态标记)等场景。对于日常业务开发,位运算符使用频率较低,但理解它能帮你更深入地理解计算机数据存储逻辑。

1. 常用位运算符

假设 a = 6(二进制 0110),b = 3(二进制 0011),各运算符效果如下:

运算符 名称 规则 示例(a=6, b=3) 结果(二进制) 结果(十进制)
& 按位与 对应位都为 1,结果为 1;否则为 0 a & b 0010 2
` ` 按位或 对应位有一个为 1,结果为 1;否则为 0 `a b` 0111 7
^ 按位异或 对应位不同为 1,相同为 0 a ^ b 0101 5
~ 按位取反 0 变 1,1 变 0(包含符号位) ~a ...11111001 -7
<< 左移 所有位向左移 n 位,右侧补 0 a << 1 1100 12
>> 右移 所有位向右移 n 位,左侧补符号位 a >> 1 0011 3

2. 实用场景示例:权限控制

用二进制位表示不同权限(每一位代表一个权限,1 表示拥有,0 表示没有):

python

运行

# 定义权限:每一位代表一个功能(1<<n 表示第n位为1)
READ = 1    # 0001(读权限)
WRITE = 2   # 0010(写权限)
DELETE = 4  # 0100(删权限)
ADMIN = 8   # 1000(管理员权限)

# 给用户分配权限:读 + 写(用 | 组合权限)
user_perm = READ | WRITE
print(user_perm)  # 输出:3(二进制 0011)

# 检查用户是否有读权限(用 & 判断,结果非0表示拥有)
has_read = (user_perm & READ) != 0
print(has_read)  # 输出:True

# 检查用户是否有删权限
has_delete = (user_perm & DELETE) != 0
print(has_delete)  # 输出:False

# 给用户添加删权限
user_perm |= DELETE
print(user_perm)  # 输出:7(二进制 0111)

# 给用户移除写权限
user_perm &= ~WRITE
print(user_perm)  # 输出:5(二进制 0101,只剩读和删权限)

六、运算符优先级:解决 “先算什么” 的问题

当一个表达式中包含多个运算符时,Python 会按照 “优先级” 决定计算顺序,优先级高的先执行。如果优先级相同,则按 “结合性”(从左到右或从右到左)执行。

1. 常用运算符优先级(从高到低)

  1. 括号 ():优先级最高,可强制改变计算顺序(推荐多用括号,让代码更清晰)。
  2. 幂运算 **:右结合性(如 2**3**2 = 2^(3^2) = 512)。
  3. 位取反 ~、逻辑非 not
  4. 算术运算符*///% 优先级高于 +-
  5. 位运算符<<>> 高于 && 高于 ^^ 高于 |
  6. 比较运算符==!=><>=<=
  7. 逻辑运算符and 优先级高于 or
  8. 赋值运算符=+=-= 等(优先级最低)。

2. 示例:优先级与括号的作用

python

运行

# 未加括号:先算乘法,再算加法
print(2 + 3 * 4)  # 输出:14(3*4=12,2+12=14)

# 加括号:先算加法,再算乘法
print((2 + 3) * 4)  # 输出:20(2+3=5,5*4=20)

# 逻辑与和或的优先级
print(True or False and False)  # 输出:True(先算and,再算or)
print((True or False) and False)  # 输出:False(括号改变顺序)

# 赋值运算符优先级最低
x = 3 + 5 * 2
print(x)  # 输出:13(先算3+5*2=13,再赋值给x)

七、总结:运算符的 “实战心法”

  1. 优先用括号:当表达式复杂时,不必死记优先级,用括号明确计算顺序,既能避免错误,又能让代码更易读。
  2. 简洁为王:复合赋值运算符(+=*= 等)和连续比较(3 < x < 10)能让代码更简洁,减少冗余。
  3. 短路求值:善用 and 和 or 的短路特性,例如 if x is not None and x > 0,避免 x 为 None 时执行 x>0 报错。
  4. 位运算场景:位运算在性能敏感、底层控制场景(如权限、状态标记)中优势明显,但日常开发不必过度使用,以免降低代码可读性。

运算符是 Python 编程的 “基石”,掌握它们能让你更灵活地处理数据和逻辑。建议结合实际场景多写代码练习(比如用算术运算符处理数值统计、用逻辑运算符实现多条件筛选),才能真正将知识内化为能力。

更多推荐