python计算符号_算术、比较、赋值、逻辑等运算符分类详解

1次阅读

python中+、==、and、+=等是运算符,:、,、()、[]等是语法符号;运算符参与计算并返回值或改变状态,语法符号仅用于结构分隔。

python计算符号_算术、比较、赋值、逻辑等运算符分类详解

Python里哪些符号算运算符,哪些只是语法符号

不是所有看起来像“符号”的东西都是运算符。比如 :,( )[ ] 是语法分隔符,不参与计算;而 +==and+= 才是真正会触发操作的运算符。混淆这两类容易在查文档时走偏——比如搜 if x: y 里的 : 是什么运算符,其实它根本不是。

判断依据很简单:这个符号是否出现在表达式中,并能返回一个值(哪怕布尔值)或改变对象状态。例如 a + b 返回和,a += 1 修改 ax == y 返回 TrueFalse —— 这些全是运算符。

算术运算符隐式类型转换陷阱

Python 的 +* 看似简单,但行为高度依赖操作数类型,且不会强制转成数字:

  • "a" + "b""ab"字符串拼接),但 "a" + 1 直接报 TypeError
  • [1] * 3[1, 1, 1],但 [1] * 2.5 报错(右操作数必须是整数)
  • 7 / 2 返回 3.5(浮点除),而 7 // 23(整除),7 % 21(取余)

特别注意 ** 是右结合:2 ** 3 ** 2 等价于 2 ** (3 ** 2) = 2 ** 9 = 512,不是 (2 ** 3) ** 2

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

比较运算符链式写法的真实含义

Python 允许写 1 ,但它**不是**先算 1 得布尔值再跟 10 比。而是等价于 (1 ,且 x 只求值一次。

这带来两个关键点:

  • 中间表达式不会重复执行 —— 对 f() > 0 and f() 有性能/副作用差异
  • 所有比较必须同向,1 5 合法(等价于 (1 5)),但 1 会报 SyntaxError(不同类比较不能混链)
  • ==is 语义完全不同:[] == []True(值相等),[] is []False(对象不同)

逻辑运算符 and/or 的短路与返回值特性

andor 不只返回 TrueFalse,而是返回**实际参与运算的对象**:

  • x and y:如果 x 为假(如 None0、空容器),返回 x;否则返回 y
  • x or y:如果 x 为真,返回 x;否则返回 y
  • 所以 "" or "default""default"0 and 1000[] or [1][1]

这意味着它们常被用作“默认值提供器”,但要注意:如果左侧是可能为假的合法值(比如函数可能返回 0 或空列表),直接用 or 会误判。此时该用 if x is not None else ... 显式判断。

运算符优先级表不必硬背,但要清楚常见冲突点:比较运算符(==)比逻辑运算符(andor)优先级高,所以 x 5 不需要括号;但位运算符&|)优先级意外地比比较还低,a & b == c 实际是 a & (b == c),几乎总是要加括号。

text=ZqhQzanResources