← 知识手册目录Python 基础 · GESP 1 / 2 / 3 级相关跳到完整速查 ↓

PYTHON KNOWLEDGE · 04

运算符、表达式与优先级

完整区分算术、比较、逻辑、成员、身份和位运算,并用优先级表消除歧义。

GESP 1GESP 2GESP 3

01 · FORMAL DEFINITION

正式定义

表达式求值得到一个值。运算符规定如何组合操作数;当一个表达式含多个运算符时,优先级和结合方向决定求值顺序,括号可以明确改变顺序。

02 · MUST KNOW

学完这一章,必须说清楚的规则

  1. 01

    / 总是得到浮点结果;// 是向负无穷方向取整的整除;% 与 // 满足 a == (a // b) * b + a % b。

  2. 02

    比较可以链式书写,如 0 <= x < 10;and/or 会短路并返回最后求值的操作数,不一定返回 bool。

  3. 03

    == 比较值是否相等,is 比较是否为同一个对象;判断 None 应写 is None。

  4. 04

    in/not in 做成员测试;对 dict 测试的是键。

  5. 05

    位运算作用于整数的二进制位;负整数按无限长二进制补码语义理解。

  6. 06

    复杂表达式即使能靠优先级正确运行,也应使用括号表达意图。

03 · RUNNABLE EXAMPLE

可运行示例与因果解释

PYTHON
a = -7
print(a // 3, a % 3)
print(2 + 3 * 4, (2 + 3) * 4)
print(0 <= 7 < 10)

HIGH → LOW

运算符优先级完整速查

同一行通常优先级相同。复杂表达式仍建议加括号表达意图,不把可读性交给记忆。

Python 运算符优先级,从高到低
级别运算符/结构含义结合
最高(表达式)、[列表]、{字典/集合}分组与容器显示
x[index]、x[start:stop]、x(...)、x.attr下标、切片、调用、属性左到右
await x等待表达式
**乘方右到左
+x、-x、~x正负号、按位取反右到左
*、@、/、//、%乘、矩阵乘、除、整除、取模左到右
+、-加、减左到右
<<、>>移位左到右
&按位与左到右
^按位异或左到右
|按位或左到右
in、not in、is、is not、<、<=、>、>=、!=、==成员、身份与比较(可链式)链式
not x逻辑非右到左
and逻辑与(短路)左到右
or逻辑或(短路)左到右
x if condition else y条件表达式右到左
lambda匿名函数
最低:=赋值表达式

COMMON PITFALLS

常见误区

  • 把 // 当成简单截断
  • 用 is 比较数字或字符串的值
  • 忘记 and 的优先级高于 or
  • 连续位移、比较和逻辑运算却不加括号

SCOPE & BOUNDARIES

适用边界

  • 浮点数比较受二进制表示误差影响,需要按问题选择容差。
  • 运算符可由自定义类重载,因此相同符号对不同类型可能有不同语义。