Python中比较运算符的关联性是什么?三次比较很简单,但更重要的是,我不确定它是如何做到的。它们似乎不是右关联或左关联。
例如:
>>> 7410 >= 8690 <= -4538 < 9319 > -7092
False
>>> (((7410 >= 8690) <= -4538) < 9319) > -7092
True
所以,不是左联想。
>>> 81037572 > -2025 < -4722 < 6493
False
>>> (81037572 > (-2025 < (-4722 < 6493)))
True
所以它也不是正确的联想。
我已经看到一些地方被“链接”了,但是如何通过四次或更多次比较来解决这个问题呢?
答案 0 :(得分:2)
使用and
扩展了链式比较,因此:
a <= b <= c
变为:
a <= b and b <= c
(b
仅评估一次)。这在language reference on comparisons中有解释。
请注意,延迟评估意味着如果a > b
,结果为False
且b
永远不会与c
进行比较。
带括号的版本完全不同; a <= (b <= c)
将评估b <= c
,然后将a
与结果进行比较,and
根本不涉及,因此比较它没有意义结果来确定相关性。
答案 1 :(得分:0)
python short-circits布尔测试从左到右:
7410>=8690<=-4538<9319>-7092 -> False
7410>=8690
是False
。而已。其余的测试没有进行。
请注意
True == 1
False == 0
都是True
并且在将布尔值与整数进行比较时适用。所以当你用括号括起语句时,你强迫python做所有的测试;详细说明:
(((7410>=8690)<=-4538)<9319)>-7092
False <=-4538
False <9319
True >-7092
True
答案 2 :(得分:-1)
您在撰写81037572>-2025
时出现类型错误,系统会将其视为True
或False
,并将其与1
和{{1}相关联}}。因此,它会与您进行二进制数比较。