¿Por qué es `True is False == False`, False en Python?

¿Por qué es que estas declaraciones funcionan como se espera cuando se utilizan paréntesis?

>>> (True is False) == False True >>> True is (False == False) True 

Pero devuelve False cuando no hay corchetes?

 >>> True is False == False False 

Related of "¿Por qué es `True is False == False`, False en Python?"

Basado en la documentación de Python sobre la precedencia del operador:

Tenga en cuenta que las comparaciones, las pruebas de membresía y las pruebas de identidad, todas tienen la misma prioridad y tienen una función de encadenamiento de izquierda a derecha como se describe en la sección Comparaciones.

Así que en realidad tienes una statement encadenada como la siguiente:

 >>> (True is False) and (False==False) False 

Puede suponer que el objeto central se compartirá entre 2 operaciones y otros objetos (Falso en este caso).

Y tenga en cuenta que también es cierto para todas las comparaciones, incluidas las pruebas de membresía y las operaciones de pruebas de identidad que siguen los operandos:

 in, not in, is, is not, <, <=, >, >=, !=, == 

Ejemplo:

 >>> 1 in [1,2] == True False 

Python tiene una propiedad transitiva única cuando se trata de operadores de comparación. Será más fácil de ver en un caso más sencillo.

 if 1 < x < 2: # Do something 

Esto hace lo que parece. Verifica si 1

 >>> True is False == False False 

Se está comprobando si Verdad es falso y Falso == Falso, solo uno de los cuales es verdadero.

Esta es una doble desigualdad que se expande como (True is False) and (False == False) . Vea, por ejemplo, ¿cuál es la prioridad del operador al escribir una doble desigualdad en Python (explícitamente en el código, y cómo se puede anular esto para las matrices)?

Python interpreta múltiples (in) igualaciones de la forma que cabría esperar en Matemáticas:

En Matemáticas a = b = c significa todos a = b , b = c y a = c .

Así que True is False == False significa True == False y False == False y True == False , que es False .

Para constantes booleanas, es equivalente a == .

Python realiza el encadenamiento si encuentra operadores de la misma prioridad al evaluar una expresión.

comparaciones, incluidas las pruebas, que tienen la misma cadena de precedencia de izquierda a derecha

Los siguientes operadores tienen la misma precedencia.

 in, not in, is, is not, <, <=, >, >=, <>, !=, == 

Entonces, cuando Python intenta evaluar la expresión True is False == False , encuentra que los operadores is y == que tienen la misma prioridad, por lo que realiza el encadenamiento de izquierda a derecha.

Entonces, la expresión True is False == False realidad se evalúa como:

 (True is False) and (False == False) 

dando False como la salida.