Mis a jour le 2025-04-14, 12:10

Opérateurs de comparaisons

Opérateurs de comparaison :
  • == : égalité (pour des nombres ou des chaînes).
  • != : inégalité (pour des nombres ou des chaînes).
  • > >= < <= : comparaison
  • is, is not permettent de comparer l'identité des objets (voir ci-dessous).
Traitement de None dans les conditions :
  • None == None est vrai
  • None != None est faux
  • None != 0 est vrai (idem pour n'importe quel nombre : None != 1, None != -1, ...)
  • None == 0 est faux (idem pour n'importe quel nombre)
  • None != 'a' est vrai (idem pour n'importe quelle chaine)
  • None != [] est vrai, None != {} est vrai (pareil pour structure non vide)
  • None < 0 et None > 0 renvoient des exceptions
Opérateurs booléens :
  • and, or, not
  • le 'and' et le 'or' sont shortcut/short-circuit, c'est à dire que le deuxième membre n'est évalué que si c'est nécessaire pour obtenir la valeur booléenne finale.
xor en python : bool(a) != bool(b)
On ne peut pas faire d'assignation dans une condition comme en c.
Comparaison de 2 objets :
  • avant python3, cmp(x, y) renvoie -1 si x < y, 1 si x > y, 0 si x = y.
  • en python3, utiliser à la place : (x > y) - (x < y)
Attention :
  • 4 > 32 est False bien sûr.
  • mais '4' > '32' est True, car comparaison de chaînes (et quand ce sont des variables de type chaîne, on ne s'en rend pas toujours compte !)
Attention à la comparaison entre types différents en python :
  • si on compare un numérique avec une string, c'est toujours le numérique le plus petit : 40 < '3' est True !!! C'est une cause de bugs fréquente quand on a oublié de convertir en numériques, et en python3, ça lève une exception (plus un problème).
  • sinon, si on compare 2 objets de types différents, c'est le nom du type qui est utilisé : [1, 2] < (1, 2) donne True, car 'list' est avant 'tuple' !!! Mais en python3, ça lève une exception.
is, is not : pour savoir si 2 objets mutables sont réellement les mêmes :
  • myList = ['a', 'b']; myList2 = ['a', 'b']
  • myList == myList2 renvoie True.
  • myList is myList renvoie True.
  • myList is myList2 renvoie False.
  • myList is not myList2 renvoie True.
  • on a le même comportement avec des tuples ou des dictionnaires.
  • par contre, pas le même comportement avec des chaînes :
    • myString = 'abc'; myString2 = 'abc'; myString is myString2 renvoie True, car les 2 variables pointent vers la même chaîne !
    • par contre, myString = 'abc'; myString2 = 'ab'; myString2 += 'c'; myString is myString2 renvoie False !

Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert