表达式"word" in [] == False
的内容以什么顺序解析?它似乎无视所有逻辑:
>>> "word" in [] == False
False
>>> ("word" in []) == False
True
>>> "word" in ([] == False)
TypeError
Python如何实际解释这个表达式,为什么会这样解释呢?
编辑:
最常见的情况似乎是
>>> any_value in any_list == any_symbol_or_value
False
答案 0 :(得分:10)
通常,您可以使用this table.找出运算符优先级。
但这实际上是一个棘手的例子:
比较可以链接 任意地,例如,x < y&lt; = z是 相当于x&lt; y和y&lt; = z,除了 y只评估一次(但在 两个案例z都没有被评估 当x < y被发现是假的。)
所以"word" in [] == False
真的是
("word" in []) and ([] == False)
其中两个[]
实际上是同一个对象。
这对其他比较很有用,即0 < a < 10
,但这里确实令人困惑!
答案 1 :(得分:1)
word in []
, and
正在使第一个表达式短路。当它意识到它是假的时,它会停止评估表达式的其余部分,这是[]
(word
刚刚测试的同一实体)与值False
之间的比较。 []
不等于False
,因此隐含的“和”表达式为false。
("word" in []) == False
按预期工作,因为( )
完成子条款并将其结果与False
进行比较。
当然,[]
再次不等于False
。
为澄清第一种情况,您可以像这样测试:
foo = []
if ("word" in foo) and (foo == False):
print "True"
else:
print "False"
从功能上讲,这是正在发生的事情。