Python运算符优先级应聚焦理解结合性与关键争议区,而非死记17级表格;需警惕and/or混用、**右结合、位运算与比较混淆、lambda及:=低优先级等易错点,多数情况应显式加括号。
Python 运算符优先级不是靠死记,而是靠理解结合性 + 少量关键层级划分就能安全写出无歧义表达式。
为什么不能只背表格?
Python 官方文档的运算符优先级表有 17 级,但实际开发中真正容易出错的只有 5–6 个“争议区”:比如 and/or 和比较运算符混用、** 与一元运算符的位置、位运算符和比较运算符的意外绑定。盲目记忆全部层级反而会掩盖真正该加括号的地方。
更关键的是:优先级只解决“谁先算”,而结合性决定“同级怎么连”。比如 2 ** 3 ** 2 是 (2 ** 3) ** 2 == 64 还是 2 ** (3 ** 2) == 512?答案是后者——因为 ** 是右结合。
-
**右结合:a ** b ** c→a ** (b ** c) - 几乎所有二元运算符(
+、-、*、/、&、|、==等)都是左结合 -
=、+=等赋值运算符也是右结合(支持链式赋值a = b = 1)
必须加括号的 4 类典型场景
这些地方即使优先级明确,也强烈建议显式加括号,否则极易被误读或未来维护者改错: