发布于 2014-09-09 21:02:23
分组(这是非比较运算符所做的):
a + b + c means (a + b) + c链接(这是比较运算符所做的):
a < b < c means (a < b) and (b < c)从左到右分组(这是分组的方式):
5 - 2 - 1 means (5 - 2) - 1 == 2相对于从右向左分组(这将产生不同的结果):
5 - (2 - 1) == 4将左向右链接
链接从左到右,因此在a < b < c中,表达式a < b是在b < c之前计算的,如果a < b是falsey,则不计算b < c。
(2 < 1 < f())在不调用函数f的情况下给出值False,因为2 < 1的计算结果为false,因此不需要执行第二个比较。
f() > 1 > g()调用f()来计算第一个比较,根据结果,它可能需要也可能不需要计算第二个条件,这需要调用g()。
注意:每个操作数最多计算一次。因此,在表达式1 < f() < 2中,函数f()只被调用一次,它给出的值用于两种比较(如果必要的话)。
发布于 2020-07-23 03:02:25
事实上,链的行为并不是那么明显。
a == b == c虽然人们会认为这会被转换成
a == b and b == c实际上,它被转换成了类似于
b == c if a == b else False如果试图覆盖比较运算符的行为并将它们链接起来,这就有点令人困惑了。
https://stackoverflow.com/questions/25753474
复制相似问题