5

Python中比较运算符的关联性是什么?三个比较很简单,但除此之外,我不确定它是如何做到的。它们似乎不是右联想或左联想。

例如:

>>> 7410 >= 8690 <= -4538 < 9319 > -7092        
False    
>>> (((7410 >= 8690) <= -4538) < 9319) > -7092 
True

所以,不是左联想。

>>> 81037572 > -2025 < -4722 < 6493           
False
>>> (81037572 > (-2025 < (-4722 < 6493)))     
True

所以它也不是右结合的。

我已经看到一些地方他们被“束缚”了,但是这如何与四个或更多比较一起工作?

4

3 回答 3

7

链式比较用 展开and,所以:

a <= b <= c

变成:

a <= b and b <= c

b虽然只评估一次)。这在比较语言参考中进行了解释。

请注意,惰性求值意味着如果a > b,则结果是False并且b永远不会与 进行比较c

您带括号的版本完全不同;a <= (b <= c)将评估b <= c然后与a结果进行比较,and根本不涉及,因此比较结果以确定关联性没有意义。

于 2015-09-12T07:57:37.780 回答
1

从左到右的python短路布尔测试:

7410>=8690<=-4538<9319>-7092        -> False

7410>=8690False。而已。其余的测试没有进行。

注意

True == 1
False == 0

True当您将布尔值与整数进行比较时,两者都适用。所以当你用括号括住语句时,你会强制 python 做所有的测试;详细地:

(((7410>=8690)<=-4538)<9319)>-7092
      False   <=-4538
            False     <9319
                    True  >-7092
                         True
于 2015-09-12T07:31:47.737 回答
-1

您在使用类型时出错,当您编写时81037572>-2025,系统会将其视为TrueorFalse并将其与 and 相关10。因此,它会为您提供与这些二进制数的比较。

于 2015-09-12T07:17:36.510 回答