>>> 5 in [1, 2, 3, 4] == False
False
我知道这是一种测试会员资格的奇怪方式,
>>> 5 not in [1, 2, 3, 4]
True
是“正确的”方式。令我困惑的是它的行为与两者不同
>>> (5 in [1, 2, 3, 4]) == False
True
和
>>> 5 in ([1, 2, 3, 4] == False)
TypeError ...
我错过了一些明显的东西吗? (在Python 2.7和Python 3.4中测试过)。
为了澄清,我理解最后三个片段。我问的是第一个代码段的行为,以及为什么它不同。
答案 0 :(得分:4)
这是一个链式比较。你可能知道你可以做到
1 < 2 < 3
在Python中,它等同于(1 < 2) and (2 < 3)
。 (或许你没有。现在你知道了。)嗯,同样的事情也适用于in
和==
。
5 in [1, 2, 3, 4] == False
相当于
(5 in [1, 2, 3, 4]) and ([1, 2, 3, 4] == False)
由于[1, 2, 3, 4]
不等于False
,因此整个表达式的计算结果为False
。