上一篇
Python运算符优先级详解 - 从入门到精通
- Python
- 2025-08-06
- 437
Python运算符优先级详解
掌握优先级规则,编写更可靠的Python代码
运算符优先级的重要性
在Python中,运算符优先级决定了表达式中运算的执行顺序。当表达式包含多个运算符时,优先级规则决定了哪些运算先执行,哪些后执行。理解运算符优先级对于编写正确、可读性强的代码至关重要。
示例: 表达式 5 + 3 * 2
中,乘法运算符*
优先级高于加法运算符+
,所以先计算3 * 2
得到6,再加5得到11,而不是8*2=16。
Python运算符优先级表
下表展示了Python运算符的优先级顺序,从最高优先级(最先执行)到最低优先级(最后执行):
优先级 | 运算符 | 描述 | 示例 |
---|---|---|---|
1 | () |
括号(最高优先级) | (3 + 2) * 4 |
2 | ** |
指数 | 2 ** 3 = 8 |
3 | ~ + - |
按位取反、正负号 | -5, +3, ~x |
4 | * / // % |
乘、除、取整除、取模 | 8 * 3, 9 / 3, 7 // 2, 7 % 3 |
5 | + - |
加、减 | 5 + 3, 10 - 4 |
6 | << >> |
位移运算符 | 8 << 1, 8 >> 1 |
7 | & |
按位与 | 5 & 3 |
8 | ^ | |
按位异或、按位或 | 5 ^ 3, 5 | 3 |
9 | < <= > >= == != |
比较运算符 | 5 < 3, 10 >= 5 |
10 | is is not |
身份运算符 | x is None |
11 | in not in |
成员运算符 | 5 in [1,2,3] |
12 | not |
逻辑非 | not True |
13 | and |
逻辑与 | True and False |
14 | or |
逻辑或(最低优先级) | True or False |
记忆技巧: "括号指数取反号,乘除加减位运算,比较身份和成员,逻辑非与或最低"
常见优先级示例解析
示例1:算术运算符优先级
result = 5 + 3 * 2 ** 2
# 计算步骤:
# 1. 2**2 = 4 (指数最高)
# 2. 3*4 = 12 (乘法次之)
# 3. 5+12 = 17 (加法最低)
print(result) # 输出: 17
示例2:比较运算符与逻辑运算符
a = 5
b = 10
c = 15
# 比较运算符优先级高于逻辑运算符
result = a < b and b < c
# 等价于: (a < b) and (b < c)
print(result) # 输出: True
示例3:混合运算符优先级
result = 10 + 5 * 2 < 20 and not 3 == 4
# 计算步骤:
# 1. 5*2 = 10 (乘法)
# 2. 10+10 = 20 (加法)
# 3. 20 < 20 → False (比较)
# 4. 3==4 → False (比较)
# 5. not False → True (逻辑非)
# 6. False and True → False (逻辑与)
print(result) # 输出: False
最佳实践与常见错误
✅ 使用括号明确优先级
即使你记得优先级规则,使用括号也能让代码更清晰、更易读:
# 不推荐的写法(可读性差)
result = x + y * z / w - v
# 推荐的写法(使用括号明确优先级)
result = x + (y * z / w) - v
❌ 常见错误案例
错误1:混淆逻辑运算符优先级
# 错误预期:先判断a是否为0,再判断b/a>2
if a != 0 and b / a > 2:
# 如果a为0会抛出ZeroDivisionError
# 因为and优先级低于比较运算符,但除法在and之前执行
# 正确写法:
if a != 0 and (b / a > 2):
# 或者更好的写法:
if a != 0:
if b / a > 2:
...
错误2:误用位运算符和比较运算符
# 错误写法:
result = 5 & 3 == 1 # 等价于 5 & (3 == 1) → 5 & False → 0
# 正确写法:
result = (5 & 3) == 1 # 先进行位运算,再比较
优先级规则总结
核心原则
- 括号拥有最高优先级,应充分利用
- 算术运算符优先级:指数 > 正负号 > 乘除 > 加减
- 位运算符优先级:取反 > 移位 > 与 > 异或 > 或
- 比较运算符优先级高于逻辑运算符
- 逻辑运算符优先级:not > and > or
专业建议
- 当不确定优先级时,使用括号明确意图
- 避免在单个表达式中使用过多不同运算符
- 复杂的表达式可以拆分成多行
- 多使用临时变量提高可读性
- 在团队中保持一致的编码风格
记住:清晰的代码比聪明的代码更重要!
本文由TanLuan于2025-08-06发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://521pj.cn/20257434.html
发表评论