python如何评估这个?

mon*_*res 0 python evaluation

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

>>> 1<3>2
True
>>> (1<3)>2
False
>>> 1<(3>2)
False
Run Code Online (Sandbox Code Playgroud)

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

Bre*_*arn 9

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

您的第二个示例强制首先计算一个比较,从而得到一个布尔值,然后将其与剩余的整数进行比较.

  • 值得注意的是,如果比较的值是表达式,它们只被评估一次,因此`1 <f()<2`并不完全等同于`1 <f()和f()<2`.更接近的等价是`x = f(); 1 <x和x <2`. (2认同)