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

Python里哪些符号算运算符,哪些只是语法符号
不是所有看起来像“符号”的东西都是运算符。比如 :、,、( )、[ ] 是语法分隔符,不参与计算;而 +、==、and、+= 才是真正会触发操作的运算符。混淆这两类容易在查文档时走偏——比如搜 if x: y 里的 : 是什么运算符,其实它根本不是。
判断依据很简单:这个符号是否出现在表达式中,并能返回一个值(哪怕布尔值)或改变对象状态。例如 a + b 返回和,a += 1 修改 a,x == y 返回 True 或 False —— 这些全是运算符。
算术运算符的隐式类型转换陷阱
Python 的 +、* 看似简单,但行为高度依赖操作数类型,且不会强制转成数字:
-
"a" + "b"→"ab"(字符串拼接),但"a" + 1直接报TypeError -
[1] * 3→[1, 1, 1],但[1] * 2.5报错(右操作数必须是整数) -
7 / 2返回3.5(浮点除),而7 // 2是3(整除),7 % 2是1(取余)
特别注意 ** 是右结合: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 的短路与返回值特性
and 和 or 不只返回 True 或 False,而是返回**实际参与运算的对象**:
-
x and y:如果x为假(如None、0、空容器),返回x;否则返回y -
x or y:如果x为真,返回x;否则返回y - 所以
"" or "default"→"default",0 and 100→0,[] or [1]→[1]
这意味着它们常被用作“默认值提供器”,但要注意:如果左侧是可能为假的合法值(比如函数可能返回 0 或空列表),直接用 or 会误判。此时该用 if x is not None else ... 显式判断。
运算符优先级表不必硬背,但要清楚常见冲突点:比较运算符(==、)比逻辑运算符(and、or)优先级高,所以 x 5 不需要括号;但位运算符(&、|)优先级意外地比比较还低,a & b == c 实际是 a & (b == c),几乎总是要加括号。










