在[False]中,为什么False == False的结果是True?

27

我一个前辈演示了这个,我想知道这是一个缺陷,还是有一些先例和操作符结合性的东西来证明它。

>>> False==False in [False]
True

2
这可能是Python著名的比较运算符链的情况(因此这将与False == False and False in [False]相同)。但我不确定... - hlt
不知道原因,但根据这里的答案:https://dev59.com/dFsX5IYBdhLWcg3wJcyW - 这可能是由于它的处理方式。(False==False) in [False] - Nicolai Krüger
将“False”替换为“1”会使其更加清晰明了。 - letsc
3
不,它不是这样的,因为“False”在数值上是0而不是1。 - user2357112
6
无论优先级如何,(False == False) in [False]False == (False in [False]) 都是 False。因此,这是链式比较。 - bereal
1个回答

40

Python的比较运算符可以链式使用。

False == False in [False]

被评估为

(False == False) and (False in [False])
中间项参与两个比较。

我更喜欢in不要与其他比较运算符链接在一起。

1
链接操作符的唯一原因是使像 x < y < z 这样的表达式合法吗?因为如果是这样,尽管它很方便,但似乎这只是一个小的好处,而代价是让类似 (False==False in [False])==True 这样令人困惑的代码也合法了。 - Charles Clayton
1
我不知道有哪些使用情况可以将 in 与其他比较运算符链接在一起以生成清晰的代码。 - Steven Rumbalski
3
Steven,你可以避免自讨苦吃,只需要不要做这种愚蠢的事情。没有人强迫你写难以维护的代码 :-) - Emil Vikström

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接