一个表达式如何与父母一样不同?

6 python python-3.x

请考虑以下声明:

> False == False in [False]
True
Run Code Online (Sandbox Code Playgroud)

然而:

> (False == False) in [False]
False
> False == (False in [False])
False
Run Code Online (Sandbox Code Playgroud)

不可思议.是什么原因和解释?

fre*_*ish 5

dis.dis救援和我的一些解释.

无论如何,它看起来像这样.考虑三个表达式X, Y, Z和两个运算符O1, O2.然后

X O1 Y O2 Z
Run Code Online (Sandbox Code Playgroud)

相当于

(X O1 Y) and (Y O2 Z)
Run Code Online (Sandbox Code Playgroud)

可以看出

a < b < c
Run Code Online (Sandbox Code Playgroud)

例.我发现这种行为非常违反直觉.

文档:

比较可以任意链接,例如,x <y <= z等于x <y和y <= z,除了y仅被评估一次(但在两种情况下,当x <y被发现时,根本不评估z是假的).

注意,这in是一个比较运算符.