scatter_matrix plotting plots how data columns column python python-internals

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 y op1 , op2 , ..., opN son operadores de comparación, entonces a op1 b op2 c ... y opN z es equivalente a a 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