ivechan
2017-08-02 19:57:45 +08:00
不得不说这个问题确实"装"到很多人, 看似简单的问题, 但是却被很多人用 C\Java 等语法套用在 Python 上弄得混淆了.
为了弄清楚这个问题, 我去查了官方文档.
里面有两句话解释了这个问题:
"Also unlike C, expressions like a < b < c have the interpretation that is conventional in mathematics:"
"Comparisons can be chained arbitrarily, e.g., x < y <= z is equivalent to x < y and y <= z"
简而言之, 在 Python 里, < > 这种比较运算符更倾向于数学的表达方式, 并且遵循"链式"的规则.
举个例子, print(2<3>1)在 Python 是 True 的, 但是在 C 语言中却是"False"的.
原因就是在数学中(Python 使用的), 这个不等式是成立的, 但是在 C 语言中, 并没有这种"数学"规则,
C 语言中是这种顺序: 2<3 是 True 的, (或者更准确地说 2<3 返回的是一个非 0).但是在实现中, 一般是把 1 作为非 0 的替代,
也就是 1 代表 True,0 代表 False. 这样整个逻辑比较就变成 1>1,也就是 False.
PS: 感谢楼主和#6, 一个非常好的问题和一个明白人.