Python 链式比较
在 Python 中有时候可以看到类似 a < b < c
的比较表达式写法,这与数学意义上的比较是一致的,但是和 a < b and b < c
还是有一点区别的。
如在 a < f(x) < c
中,如果 a < f(x)
返回 False
,则不会进行 f(x)
与 c
的比较而直接返回 False
,这与 a < f(x) and f(x) < c
是一致的。而如果 a < f(x)
返回 True
,则还需要进行 f(x)
与 c
的比较,这种情况下,a < f(x) < c
的写法只会调用一次 f(x)
,而 a < f(x) and f(x) < c
的写法会调用两次 f(x)
。
示例
a < f(x) < c
In [1]: a = 0
In [2]: def f():
...: global a
...: a += 1
...: print(a)
...: return a
...:
In [3]: print(0 < f() < 2)
1
True
a < f(x) and f(x) < c
In [1]: a = 0
In [2]: def f():
...: global a
...: a += 1
...: print(a)
...: return a
...:
In [3]: print(0 < f() and f() < 2)
1
2
False