不知何故,这有效:
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
显然,这并不是解决一个简单的操作顺序问题。区间比较是一个特殊的算子,还是其他的东西?
答案 0 :(得分:30)
与大多数语言不同,Python支持chained comparison operators并对它们进行评估,因为它们将在普通数学中进行评估。
这一行:
return min <= test <= max
由Python评估如下:
return (min <= test) and (test <= max)
然而,大多数其他语言会像这样评估它:
return (min <= test) <= max
答案 1 :(得分:3)
比较可以任意链接,例如,
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
,但每个表达式最多只评估一次。