Parallèlement aux autres réponses qui mentionnent la priorité de not
est inférieure à in
, votre déclaration équivaut en fait à:
not (True in [False, True])
Mais notez que si vous ne séparez pas votre condition des autres, python utilisera 2 rôles ( precedence
ou chaining
) afin de séparer cela, et dans ce cas, python a utilisé la priorité. Notez également que si vous souhaitez séparer une condition, vous devez mettre toutes les conditions entre parenthèses, pas seulement l'objet ou la valeur:
(not True) in [False, True]
Mais comme mentionné, il y a une autre modification par python sur les opérateurs qui enchaîne :
Basé sur la documentation de python :
Notez que les comparaisons, les tests d'appartenance et les tests d'identité ont tous la même priorité et ont une fonction de chaînage de gauche à droite comme décrit dans la section Comparaisons.
Par exemple, le résultat de l'instruction suivante est False
:
>>> True == False in [False, True]
False
Parce que python enchaînera les instructions comme suit:
(True == False) and (False in [False, True])
Ce qui est exactement False and True
ce qui estFalse
.
Vous pouvez supposer que l'objet central sera partagé entre 2 opérations et d'autres objets (False dans ce cas).
Et notez que c'est également vrai pour toutes les comparaisons, y compris les tests d'appartenance et les opérations de tests d'identité qui sont des opérandes suivants:
in, not in, is, is not, <, <=, >, >=, !=, ==
Exemple :
>>> 1 in [1,2] == True
False
Un autre exemple célèbre est la plage de nombres:
7<x<20
ce qui est égal à:
7<x and x<20