区间比较是如何工作的?
不知怎么的,这段代码能正常运行:
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 个回答
5
根据Python文档的说明:
比较操作可以随意连接,比如说
x < y <= z
其实等同于x < y and y <= z
,不过这里的y
只会被计算一次(但在这两种情况下,如果发现x < y
是假的,z
就根本不会被计算)。简单来说,如果 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
,不过每个表达式最多只会被计算一次。
36
和大多数编程语言不同,Python支持链式比较运算符,它的计算方式就像我们在普通数学中计算一样。
这一行:
return min <= test <= max
在Python中是这样计算的:
return (min <= test) and (test <= max)
而大多数其他语言则会这样计算:
return (min <= test) <= max