0

有人可以解释这些结果是如何可能的(python 2.6):

>>> 1<3>2
True
>>> (1<3)>2
False
>>> 1<(3>2)
False

我认为最后两个中的一个将与第一个匹配,但显然第一个语句中的运算符以某种方式链接?!

4

4 回答 4

9

您的第一个示例显示了比较链接1<3>2表示1<3 and 3>2(除了每个表达式只计算一次)。这适用于 Python 中的所有比较运算符。

您的后两个示例强制首先评估一个比较,从而产生一个布尔值,然后将其与剩余的整数进行比较。

于 2012-09-05T07:09:36.773 回答
4

在您的第一种情况下1<3>2 1,实际上小于33大于2,所以True

在您的第二种情况下,(1<3)>2 (1<3)评估为True表示为1,因此1不大于2

在您的第三种情况下1<(3>2)1不小于True表示为 的值1

于 2012-09-05T07:08:31.317 回答
2

最后两个语句将布尔值与整数进行比较:

>>> True > 2
False
>>> 1 < True
False

第一个语句是比较链接,它适用于 Python 中的所有布尔比较。文档中的注释:

比较产生布尔值:True 或 False。

通过将表达式的一部分放在括号中,这些部分首先得到评估,最后你会比较整数和布尔值。

于 2012-09-05T07:09:25.003 回答
1

根据文档

与 C 不同,Python 中的所有比较操作都具有相同的优先级,低于任何算术、移位或按位操作。同样与 C 不同的是,像 a < b < c 这样的表达式具有数学中的常规解释:

比较 ::= or_expr (comp_operator or_expr)*

comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "<>" | "!=" | “是” [“不是”] | [“不”]“在”

比较产生布尔值:TrueFalse

比较可以任意链接,例如,x < y <= z 等价于 x < y 和 y <= z,除了 y 只计算一次(但在这两种情况下,当找到 x < y 时根本不计算 z是假的)。

于 2012-09-05T07:13:19.097 回答