python常用运算符优先级_一张图看懂核心运算符执行顺序

2次阅读

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

python常用运算符优先级_一张图看懂核心运算符执行顺序

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 先算?

逻辑运算符 andor 的优先级低于比较运算符==!=inis 等),这意味着 a == b and c == d 不需要括号也安全,但 a == b or c in d 同样按预期分组。

  • 反例:False == False or True(False == False) or TrueTrue,没问题
  • 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 ca | (b in c),而 b in c 返回 bool,和整数做 | 会触发隐式转换(True → 1),结果不可控
  • 除非明确在做位操作,否则日常判断尽量用 and/or;混用 &== 是静态检查工具(如 pylint)高频报错点

真正该画图记的,其实只有三组边界:幂和一元负号的咬合、比较与逻辑之间的断层、位运算夹在中间的尴尬位置。其余大部分,靠括号保命比背表更可靠;而最危险的,永远是那个你“觉得肯定没问题所以没加括号”的表达式。

text=ZqhQzanResources