CMP |
Compare |
---|---|
Python 1 et 2 |
Syntaxe
cmp(x,y) |
Paramètres
Nom | Description |
---|---|
x | Ce paramètre permet d'indiquer la première expression à comparer |
y | Ce paramètre permet d'indiquer la deuxième expression à comparer |
Description
Cette fonction permet d'effectuer la comparaison de deux objets.
Algorithme
* Entrées : * a : première valeur à comparer * b : deuxième valeur à comparer * * Sortie : * Retourne un entier selon les règles suivantes : * Si a < b, retourne -1 * Si a = b, retourne 0 * Si a > b, retourne 1 MODULE CMP(a, b) SI a < b ALORS RETOURNE -1 SINON SI a = b ALORS RETOURNE 0 SINON SI a >b ALORS RETOURNE 1 FIN SI |
Remarques
- Cette fonction était très pratique dans les algorithmes de tri personnalisé, en particulier avec sort() ou sorted(), où on passait cmp comme fonction de comparaison. Elle permettait un tri multi-critères avant l'introduction de key= avec lambda.
- La fonction cmp() n'existe plus en Python 3, car elle a été jugée peu claire et source d'ambiguïtés. À la place, on recommande d'utiliser les opérateurs de comparaison classiques (<, >, ==,...), ou bien de construire une fonction de clef.
- Pour migrer un code utilisant cmp() de Python 2 vers Python 3, on peut utiliser la fonction functools.cmp_to_key() transformant une fonction cmp en une fonction compatible avec key= pour les tris. Cela permet de préserver un comportement similaire tout en respectant la syntaxe moderne.
- cmp() fonctionne sur tous les objets comparable entre eux : entiers, chaînes, tuples,... Toutefois, comparer des types incompatibles (comme un entier et une chaîne de caractères) provoquait une exception TypeError, ce qui limitait parfois son usage.
- L'ordre de comparaison de cmp(x, y) respecte les conventions mathématiques : un résultat négatif signifie que le premier élément est inférieur au second, un résultat nul qu'ils sont égaux, et un résultat positif qu'il est supérieur. C'est une logique intuitive mais moins "pythonic" que les comparateurs explicites.
- Son retrait en Python 3 fait partie de l'effort de rendre le langage plus lisible et moins ambigu. Les développeurs sont maintenant encouragés à écrire des comparaisons claires comme if x < y: plutôt que de s'appuyer sur des valeurs entières retournées par cmp().
- Il peut être utile de redéfinir manuellement une fonction cmp() dans un projet Python 3, par exemple :
- def cmp(x, y):
- return (x > y) - (x < y)
Cela recrée le comportement original en une seule ligne et peut être utilisé dans des cas spécifiques ou pour des raisons de compatibilité.
Dernière mise à jour : Mercredi, le 14 septembre 2016