我偶然发现了Python 3中的以下行。
1 in range(2) == True
由于True
为True且1 in range(2)
为True,我原以为True == True
。
但这会输出False
。所以它与(1 in range(2)) == True
并不相同。此外,它与引发错误的1 in (range(2) == True)
并不相同。
尽管有多年的Python经验,但我还是措手不及。发生了什么事?
答案 0 :(得分:13)
这是因为两个运算符都是比较运算符,所以它被解释为运算符链接:
https://docs.python.org/3.6/reference/expressions.html#comparisons
比较可以任意链接,例如,
x < y <= z
是等效的 至x < y and y <= z
,但y
仅评估一次(但两者都有) 如果发现z
为false,则根本不评估案例x < y
。
所以它相当于:
>>> (1 in range(2)) and (range(2) == True)
False