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
873

被折叠的 条评论
为什么被折叠?



