51 votes

Pourquoi 'True == not False' est-il une erreur de syntaxe dans Python ?

La comparaison des valeurs booléennes avec == fonctionne dans Python. Mais lorsque j'applique l'opérateur booléen not, le résultat est une erreur de syntaxe :

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
>>> 

Pourquoi est-ce une erreur de syntaxe ? Je m'attendrais not False soit une expression qui renvoie une valeur booléenne, et que True == <x> soit une syntaxe valide chaque fois que <x> est une expression avec une syntaxe valide.

10voto

unwind Points 181987

C'est juste une question de priorité de l'opérateur. Essayez :

>>> True == (not False)
True

Jetez un œil dans ce tableau des précédents de l'opérateur, vous trouverez que == se lie plus haut que not, et donc True == not False est analysé comme (True == not) False, ce qui est clairement une erreur.

-5voto

Nick Points 11

Je pense que ce que vous cherchez, c'est "et non". Cela vous donne les résultats que vous attendez. Si votre comparaison des booléens que vous avez est une expression booléenne composée, voici un exemple de site Web Expression booléenne composée.

>>> 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X