> Les bases > Le langage > Opérateurs de comparaisons
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