有人可以解释这些结果是如何可能的(python 2.6):
>>> 1<3>2
True
>>> (1<3)>2
False
>>> 1<(3>2)
False
我认为最后两个中的一个与第一个匹配,但显然第一个语句中的运算符是以某种方式链接的?!
答案 0 :(得分:9)
您的第一个示例显示comparison chaining。 1<3>2
表示1<3 and 3>2
(除了每个表达式仅评估一次)。这适用于Python中的所有比较运算符。
你的第二个例子强制首先评估一个比较,得到一个布尔值,然后将其与剩余的整数进行比较。
答案 1 :(得分:4)
在您的第一个案例中,1<3>2
1
实际上小于3
且3
大于2
,因此True
。
在您的第二个案例中,(1<3)>2
(1<3)
评估为True
,表示为1
,因此1
不大于2
。< / p>
在第三种情况1<(3>2)
中,1
不小于代表True
的{{1}}。
答案 2 :(得分:2)
最后两个语句将布尔值与整数进行比较:
>>> True > 2
False
>>> 1 < True
False
第一个语句是comparison chaining,它适用于Python中的所有布尔比较。请注意文档:
比较产生布尔值:True或False。
通过将表达式的一部分放在括号中,首先对这些部分进行求值,然后最后比较整数和布尔值。
答案 3 :(得分:1)
根据docs,
与C不同,Python中的所有比较操作都具有相同的优先级,低于任何算术,移位或按位操作的优先级。与C不同,表达式如同&lt; b&lt; c具有数学常规的解释:
比较:: = or_expr(comp_operator or_expr)*
comp_operator :: =“&lt;” | “&gt;” 中| “==”| “&gt; =”| “&lt; =”| “&LT;&gt;” 中| “!=” | “是”[“不是”] | [“not”]“in”
比较产生布尔值:
True
或False
。比较可以任意链接,例如,x <1。 y&lt; = z等于x&lt; y和y&lt; = z,除了y仅被评估一次(但在两种情况下,当x&lt; y被发现为假时,根本不评估z。)