python运算符优先级顺序口诀_快速记忆常用优先级的口诀与技巧

1次阅读

幂运算最高(右结合),接着是///%(左结合),然后是+-(左结合),再是==!=(左结合),最后是赋值=(右结合);例如-32得-9,2+34先算乘,10-3+2从左得9,3+4==7无需括号。

python运算符优先级顺序口诀_快速记忆常用优先级的口诀与技巧

python 运算符优先级没有官方口诀,但靠死记表格容易混淆——真正管用的是按「结合性 + 常见组合」分层理解,再配几个短小精准的助记点。

记住这 5 层结构,覆盖 95% 场景

不用背全部 17 级,日常写代码高频出现的就这几层,从高到低:

  • **(右结合)→ 幂运算单独一层,比 + - 高得多,-3**2-9 不是 9
  • * / // %(左结合)→ 四则中除法类统一高于加减,2 + 3 * 4 先算乘
  • + -(左结合)→ 加减同级,10 - 3 + 2 从左算得 9,不是 5
  • == != > >=(左结合)→ 比较运算符同级且低于算术,3 + 4 == 7 没括号也对;但 3 是 True and FalseFalse(链式比较!)
  • and or notnot 最高,and 次之,or 最低)→ not 优先于 andand 优先于 orFalse or not True and True 等价于 False or ((not True) and True)

最容易踩坑的 3 种情况

优先级本身不难,难在「看起来像会那样算,其实不是」:

  • is== 优先级相同,但语义完全不同:x is y == z 是链式比较,等价于 (x is y) and (y == z),不是 (x is y) == z
  • Lambda 优先级最低,所以 lambda x: x + 1 == 2 被解析为 lambda x: (x + 1 == 2),不是 (lambda x: x + 1) == 2
  • await 优先级低于 **,高于 *:即 await x ** 2 合法,但 await x * 2 会报 SyntaxError,必须写成 (await x) * 2

调试时快速验证优先级的方法

别猜,用 ast 模块看 Python 实际怎么解析:

立即学习Python免费学习笔记(深入)”;

import ast print(ast.dump(ast.parse('a + b * c', mode='eval'), indent=2))

输出里能看到 BinOpopMult 包在 Add 里面,说明 * 先于 +。对复杂表达式(比如含 and/or/if-else 三元)尤其有用。

真正要留心的不是「哪一级最高」,而是「哪些看似并列实则分层」——比如 not 看起来和 and 都是逻辑词,但它绑定更紧;又比如 isin 优先级一样,但没人会把它们混着链式写。多写两行括号,远比查表省心。

text=ZqhQzanResources