Python中条件中运算求值的顺序



如果我有类似a = [1,2,3]的东西,并且我写了类似1 in a == True的语句,那么它的计算结果似乎为false。

但是,如果我编写(1 in a) == True,则计算结果为true。

我对Python如何评估第一个语句最终达到false有点困惑。

==in都被视为比较运算符,这意味着运算符链接生效:

比较可以任意链接,例如,x < y <= z等效于x < y and y <= z,只是y只被评估一次(但在这两种情况下,当发现x < y为假时,z根本不被评估(。

此链接允许您编写:

if 0 <= x < 20: # meaning: if x >= 0 and x < 20:

因此,表达式1 in a == True被链接为1 in a and a == True,并且由于该and的右侧评估为假,因此整个表达式为假。

当你";隔离物";表达式的一部分用括号括起来,这就是(1 in a) == True按您期望的方式工作的原因。


已经解释过,将布尔值与True(或False(进行比较实际上不是你应该做的事情,因为这会导致逻辑上无限的场景,比如:

if (((a == 7) == True) != False) == True # 'a == 7' already a boolean.

只使用其中一个要好得多:

if expression        # if comparing with True
if not expression    # if comparing with False

最新更新