26 votos

¿Por qué es ' == True False no ' un error de sintaxis en Python?

Comparando valores booleanos con == funciona en Python. Pero cuando aplico el boolean not operador, el resultado es un error de sintaxis:

Python 2.7 (r27:82500, Sep 16 2010, 18:02:00) 
[GCC 4.5.1 20100907 (Red Hat 4.5.1-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> True == True
True
>>> False == False
True
>>> True is not False
True
>>> True == not False
  File "<stdin>", line 1
    True == not False
              ^
SyntaxError: invalid syntax
>>> 

¿Por qué esto es un error de sintaxis? Espero que not False a ser una expresión que devuelve un valor booleano, y True == <x> ser sintaxis válida siempre que sea <x> es una expresión con sintaxis válida.

40voto

Rafe Kettler Puntos 29389

Tiene que ver con la precedencia de operadores en Python (el intérprete piensa que usted está comparando los fieles a no, ya == tiene una precedencia mayor que not). Usted necesita algún paréntesis para aclarar el orden de las operaciones:

True == (not False)

En general, usted no puede usar not en el lado derecho de una comparación sin paréntesis. Sin embargo, no puedo pensar en una situación en la que alguna vez había necesidad de utilizar un not en el lado derecho de una comparación.

8voto

unwind Puntos 181987

Es sólo una cuestión de precedencia de operador.

Tratar de:

>>> True == (not False)
True

Échale un vistazo a esta tabla de la precedencia de operadores, usted encontrará que == enlaza tigher que not y así True == not False se analiza como (True == not) False que es claramente un error.

2voto

Nick Puntos 11

Creo que lo que buscas es "y no". Esto le da los resultados que busca hacia. Si tus valores booleanos en comparación lo que tienes es una expresión booleana compuesta, aquí es un sitio web de ejemplo Expresión booleana compuesta.

>>> True and True
True
>>> True and not True
False
>>> True and not False
True
>>> False and not True
False
>>> False and not False
False
>>> False and False
False

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X