在Python 3中,x在范围(...)== y中的含义是什么?

时间:2018-02-09 23:26:39

标签: python python-3.x

我偶然发现了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经验,但我还是措手不及。发生了什么事?

1 个答案:

答案 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