¿Qué significa x en el rango (…) == y significa en Python 3?

Me topé con la siguiente línea en Python 3.

1 in range(2) == True 

Esperaba que esto fuera True ya que 1 in range(2) es Verdadero y True == True es Verdadero.

Pero esto da como resultado False . Por lo tanto, no significa lo mismo que (1 in range(2)) == True . Además, no significa lo mismo que 1 in (range(2) == True) que genera un error.

A pesar de los años de experiencia en Python, estoy desprevenido. Que esta pasando?

Esto se debe al hecho de que ambos operadores son operadores de comparación, por lo que se interpreta como encadenamiento de operadores:

https://docs.python.org/3.6/reference/expressions.html#comparisons

Las comparaciones se pueden encadenar arbitrariamente, por ejemplo, x < y <= z es equivalente a x < y and y <= z , excepto que y se evalúa solo una vez (pero en ambos casos z no se evalúa en absoluto cuando se encuentra x < y ser falso).

Entonces es equivalente a:

 >>> (1 in range(2)) and (range(2) == True) False