为什么这不能用作数组成员资格测试?

时间:2016-12-06 03:09:28

标签: python python-2.7 python-3.x

>>> 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中测试过)。

为了澄清,我理解最后三个片段。我问的是第一个代码段的行为,以及为什么它不同。

1 个答案:

答案 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