Python解析器中的复杂性

ppa*_*lka 1 python

"word" in [] == False解析表达式的内容的顺序是什么?它似乎无视所有逻辑:

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

Python如何实际解释这个表达式,为什么它会这样解释呢?

编辑:

最常见的情况似乎是

>>> any_value in any_list == any_symbol_or_value
False
Run Code Online (Sandbox Code Playgroud)

Joc*_*zel 10

通常,您可以使用此表找出运算符优先级..

但这实际上是一个棘手的例子:

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

请参阅比较说明.

所以"word" in [] == False真的

("word" in []) and ([] == False)
Run Code Online (Sandbox Code Playgroud)

两者[]实际上是同一个对象.

这对其他比较很有用,也就是说0 < a < 10,但这里真的很混乱!