Python中比较运算符的相关性

时间:2015-09-12 07:10:19

标签: python comparison comparison-operators associativity

Python中比较运算符的关联性是什么?三次比较很简单,但更重要的是,我不确定它是如何做到的。它们似乎不是右关联或左关联。

例如:

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

所以,不是左联想。

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

所以它也不是正确的联想。

我已经看到一些地方被“链接”了,但是如何通过四次或更多次比较来解决这个问题呢?

3 个答案:

答案 0 :(得分:2)

使用and扩展了链式比较,因此:

a <= b <= c

变为:

a <= b and b <= c

b仅评估一次)。这在language reference on comparisons中有解释。

请注意,延迟评估意味着如果a > b,结果为Falseb永远不会与c进行比较。

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

答案 1 :(得分:0)

python short-circits布尔测试从左到右:

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

答案 2 :(得分:-1)

您在撰写81037572>-2025时出现类型错误,系统会将其视为TrueFalse,并将其与1和{{1}相关联}}。因此,它会与您进行二进制数比较。