间隔比较如何工作?

时间:2014-06-26 16:53:23

标签: python syntax comparison

不知何故,这有效:

def in_range(min, test, max):
    return min <= test <= max

print in_range(0, 5, 10)  # True
print in_range(0, 15, 10)  # False

但是,我不能完全弄清楚这里的操作顺序。让我们测试False案例:

print 0 <= 15 <= 10  # False
print (0 <= 15) <= 10  # True
print 0 <= (15 <= 10)  # True

显然,这并不是解决一个简单的操作顺序问题。区间比较是一个特殊的算子,还是其他的东西?

2 个答案:

答案 0 :(得分:30)

与大多数语言不同,Python支持chained comparison operators并对它们进行评估,因为它们将在普通数学中进行评估。

这一行:

return min <= test <= max

由Python评估如下:

return (min <= test) and (test <= max)

然而,大多数其他语言会像这样评估它:

return (min <= test) <= max

答案 1 :(得分:3)

正如Python documentation

中所述
  

比较可以任意链接,例如,x < y <= z等同于x < y and y <= z,但y仅评估一次(但在两种情况下z都未评估所有x < y被发现为假的时候。

     

正式,如果 a b c ,..., y z 是表达式, op1 op2 ,..., opN 是比较运算符,然后a op1 b op2 c ... y opN z等效于a op1 b and b op2 c and ... y opN z,但每个表达式最多只评估一次。