区间比较是如何工作的?

26 投票
2 回答
16437 浏览
提问于 2025-04-18 11:13

不知怎么的,这段代码能正常运行:

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 就根本不会被计算)。

简单来说,如果 abc、...、yz 是一些表达式,而 op1op2、...、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

撰写回答