Python运算符优先级需理解而非死记,易错点在中段相似运算符组合;如幂运算优先级高于一元负号,故-5 2等于-(5 2)即-25,需括号写为(-5) 2才得25。

Python 运算符优先级不是靠死记,而是靠理解结合场景推演;真正容易出错的,从来不是最高或最低优先级的运算符,而是中段那几组看起来“差不多”的——比如 and 和 &、== 和 is、甚至 ** 和一元 - 的组合。
为什么 -5 ** 2 等于 -25 而不是 25?
因为幂运算 ** 的优先级高于一元负号 -,所以实际执行的是 -(5 ** 2),而非 (-5) ** 2。这是初学者最常栽跟头的地方,尤其在写数学表达式或数组索引时。
- 想表达“负五的平方”,必须加括号:
(-5) ** 2 - 类似地,
not x in y等价于not (x in y),不是(not x) in y(后者会报TypeError) - 所有一元运算符(
+、-、~、not)都比二元运算符优先级高,但彼此之间也有顺序:not>+/->~
and / or 为什么总比 == 和 in 先算?
逻辑运算符 and 和 or 的优先级低于比较运算符(==、!=、、in、is 等),这意味着 a == b and c == d 不需要括号也安全,但 a == b or c in d 同样按预期分组。
- 反例:
False == False or True→(False == False) or True→True,没问题 - 但
False == False or True and False会先算True and False,再算==和or,结果仍是True;可读性已崩坏,应显式加括号 - 记住口诀:比较运算符是“粘合剂”,把操作数先绑牢,逻辑运算符才在它们之上搭桥
位运算符 & | ^ 容易和布尔逻辑混淆
&、|、^ 是位运算符,优先级远低于比较运算符,但高于 and/or。这导致 a & b == c 实际被解析为 a & (b == c),几乎永远不是你想要的。
立即学习“Python免费学习笔记(深入)”;
- 正确写法必须是:
(a & b) == c - 同理,
a | b in c→a | (b in c),而b in c返回bool,和整数做|会触发隐式转换(True → 1),结果不可控 - 除非明确在做位操作,否则日常判断尽量用
and/or;混用&和==是静态检查工具(如pylint)高频报错点
真正该画图记的,其实只有三组边界:幂和一元负号的咬合、比较与逻辑之间的断层、位运算夹在中间的尴尬位置。其余大部分,靠括号保命比背表更可靠;而最危险的,永远是那个你“觉得肯定没问题所以没加括号”的表达式。










