Python关系运算符支持连续比较,如a < b < c等价于a < b and b < c但更简洁、只计算一次b;适用于范围校验、顺序判断等场景,需注意类型兼容性和运算符混合限制。

Python 中关系运算符支持连续比较,写法自然直观,比如 a < b < c,它等价于 a < b and b < c,但更简洁、可读性更强,且只计算一次中间值(避免重复求值副作用)。
连续比较的基本写法
直接把多个比较运算符连写在一个表达式里,不需要用 and 拼接:
-
x == y == z:检查三者是否全部相等 -
10 < age <= 65:检查年龄是否在合法工作区间 -
'a' < char < 'z':判断字符是否为小写字母 -
0 <= score <= 100:验证分数是否在有效范围内
和普通 and 连接的区别
表面效果相似,但行为有关键差异:
- 连续比较是“原子性”求值:
a < b < c中b只被计算一次;而a < b and b < c里如果b是函数调用(如get_value()),会被执行两次 - 语义更清晰:连续写法明确表达了“b 在 a 和 c 之间”的数学含义
- 不支持混合运算符:不能写
a < b == c这类混用(虽然语法允许,但易引发误解;建议拆开或加括号明确意图)
常见误用与注意事项
连续比较很便利,但要注意边界情况:
- 类型要兼容:比如
5 < 'hello'会报TypeError,所以5 < x < 10要求x必须是可与整数比较的数值类型 - 字符串比较按 Unicode 码点:例如
'A' < 'a'为True(因为'A'码点是 65,'a'是 97),但'Z' < 'a'也是True - 链式比较不适用于自定义类,除非你显式实现了所有相关比较方法(如
__lt__、__le__等)
实用例子:范围校验与排序判断
连续比较特别适合做数据校验和顺序判断:
- 温度是否在舒适区间:
18 <= temp <= 26 - 三个变量是否严格递增:
low < mid < high - 检测字符是否属于数字字符:
'0' <= ch <= '9' - 避免冗余写法:
if 0 <= i < len(lst): ...比if i >= 0 and i < len(lst): ...更安全简洁


















