2.1.3 Comparaisons

Les opérateurs de comparaison sont applicables à tous les objets. Ils ont tous la même priorité (celle-ci est plus forte que pour les opérateurs booléens). Les comparaisons peuvent être enchaînées arbitrairement; par exemple x <y <= z est équivalent à x < y and y <= z sauf que y n'est évalué qu'une seule fois. (Dans les deux cas, z n'est pas évalué si x < y se révèle faux.)

La table suivante résume les opérateurs de comparaison:

Opérateur Opération Notes 
<strictement inférieur à 
<=inférieur ou égal à 
>strictement supérieur à 
>=supérieur ou égal à 
==égal à 
!=n'est pas égal à(1)
<>n'est pas égal à(1)
isest la même instance que 
is notn'est pas la même instance que 

Notes:

(1)
<> et != sont deux symboles pour le même opérateur. (GvR n'a pas tranché entre ABC et C! :-) ABC ABC != est préférable, <> est obsolète.

Les objets de types différents ne peuvent pas être égaux, sauf dans le cas de types numériques différents. En revanche, ces objets sont ordonnés de manière cohérente mais arbitraire, de telle sorte qu'un tri sur un tableau hétérogène donne un résultat cohérent. De plus, certains types (comme les types de fichiers), ne supportent qu'une forme dégénérée de comparaison, dans laquelle tous les objets de ce type sont différents. Ces objets peuvent, dans ce cas aussi, être ordonnancés de manière arbitraire mais cohérente.

Les instances d'une classe sont considérées comme différentes, sauf si la méthode __cmp__() est définie dans cette classe. Cette méthode et ses effets sur la comparaison des objets sont décrits plus précisément dans Python Reference Manual.

Note d'implémentation: Les objets de types différents, hormis les types numériques, sont ordonnés par nom de type. Les objets de même type pour lesquels la comparaison n'est pas applicable sont ordonnés en utilisant leur adresse.

Pour les types séquences, il existe deux autres opérations avec la même priorité syntaxique, ce sont "in" et "not in" (voir plus loin).