usar - ¿Por qué es `True is False== False`, False en Python?
true y false en python (5)
Basado en la documentation 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 declaración 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 son los siguientes operandos:
in, not in, is, is not, <, <=, >, >=, !=, ==
Ejemplo:
>>> 1 in [1,2] == True
False
Esta pregunta ya tiene una respuesta aquí:
¿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
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 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. Comprueba si 1 <x y si x <2. Lo mismo está sucediendo en su código no entre paréntesis.
>>> True is False == False
False
Está comprobando si Verdad es falso y Falso == Falso, solo uno de los cuales es verdadero.
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 operadores mencionados a continuación tienen la misma prioridad.
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.