Tengo una pregunta sobre la identidad en python, soy un principiante en python y he leído algunos cursos sobre "es" palabra clave y "no es". ¿Y no entiendo por qué la operación "Falso no es Verdadero no es Verdadero no es Verdadero no es Verdadero" es igual a Falso en Python? Para mí esta operación tiene que devolver True.

3
Progear 9 oct. 2019 a las 18:57

3 respuestas

La mejor respuesta

Python comparaciones de cadenas:

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.

Tu expresión es:

False is not True is not True is not False is not True

Que se convierte en:

(False is not True) and (True is not True) and (True is not False) and (False is not True)

Lo que es equivalente a:

(True) and (False) and (True) and (True)

Que es False.

3
Peter Wood 9 oct. 2019 a las 16:19

Estás lidiando con la lógica. Es útil pensar en True = 1 y False = 0.

Piensa en ello de esta manera. 0 no es 1, eso devolverá True porque el número 0 no es el número 1 y es una declaración verdadera. Mismo concepto con verdadero y falso

0 is not 1
#this will return False
False is not True
#the computer reads this in the exact same manner.
-1
Jeff R 9 oct. 2019 a las 16:00

is se refiere a identidad .

Cuando preguntas if x is y, ¿realmente estás preguntando si son x y y el mismo objeto ? (Tenga en cuenta que esta es una pregunta diferente a ¿x y y tienen el mismo valor? )

Del mismo modo, cuando preguntas if x is not y, ¿realmente estás preguntando si son x y y objetos diferentes?

Específicamente en lo que respecta a True y False, Python los trata como singletons , lo que significa que solo hay un objeto False en un programa completo. Cada vez que asigna algo a False, esa es una referencia al único objeto False, por lo que todos los objetos False tienen la misma identidad .

2
John Gordon 9 oct. 2019 a las 16:09
58308021