如果我有类似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