python - plotting - ¿Por qué `False is False is False` evalúa` True`?
python pandas plots (5)
Citando la documentación oficial de Python ,
Formalmente, si
a
,b
,c
, ...,y
,z
son expresiones yop1
,op2
, ...,opN
son operadores de comparación, entoncesa op1 b op2 c ... y opN z
es equivalente aa op1 b and b op2 c and ... y opN z
, excepto que cada expresión se evalúa como máximo una vez.
Entonces, False is False is False
se evalúa como
(False is False) and (False is False)
La segunda expresión False is False
utiliza el segundo False
en la expresión original, que se traduce efectivamente en
True and True
Es por eso que la primera expresión evalúa ser True
.
Pero en la segunda expresión, la secuencia de evaluación es la siguiente.
(False is False) is False
Que es en realidad
True is False
Es por eso que el resultado es False
.
Por qué en Python se evalúa de esta manera:
>>> False is False is False
True
pero cuando se intenta con paréntesis se comporta como se esperaba:
>>> (False is False) is False
False
Creo que lo False is False is False
significa (False is False) and (False is False)
, pero (False is False) is False
significa:
>>> (False is False) is False
False
>>> a_true = (False is False)
>>> a_true
True
>>> a_true is False
False
Entonces, obtienes el resultado.
Los operadores de encadenamiento como a is b is c
es equivalente a a is b and b is c
.
Entonces, el primer ejemplo es False is False and False is False
, que se evalúa como True and True
que se evalúa como True
Tener paréntesis conduce al resultado de comparar una evaluación con la siguiente variable (como dices que esperas), entonces (a is b) is c
compara el resultado de a is b
con c
.
Tu expresión
False is False is False
es tratado como
(False is False) and (False is False)
Entonces obtienes
True and True
y eso se evalúa como True
.
También puede usar este tipo de encadenamiento con otros operadores.
1 < x < 10
>>> False is False is False
True
En este caso, se evalúa cada uno de los pares False
. Los primeros dos False se evalúan, si es True
, luego se evalúa el segundo y el tercer False
y se devuelve el resultado.
En este caso, False is False is False
es equivalente False is False is False
de los resultados de 2 comandos False is False