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