Python - Pourquoi cmp () est-il utile?
cmp() returns -1 if x < y
et
cmp() returns 0 if x == y
et
cmp() returns 1 if x > y
Le tutoriel dit aussi que
cmp() retourne le signe de la différence de deux nombres
Je ne comprends vraiment pas ce que signifie signe de la différence de deux nombres. N'est-ce pas dire qu'elle renvoie une valeur lorsque le signe de nombre ne sont pas égaux ( positifs et négatifs signe ) ? Depuis...
cmp(80, 100) : -1 # both have positive sign.
cmp(180, 100) : 1 # both also have positive sign.
cmp(-80, 100) : -1
cmp(80, -100) : 1
**Remarque: le code du tutoriel.*
Malgré ma confusion dans le signe des différences, je ne peux pas vraiment penser à pourquoi nous avons besoin d'une fonction intégrée pour renvoyer une valeur de -1 si x < y.
N'est pas la fonction cmp( )
facilement mis en œuvre ? Est-il une raison pourquoi Python créateurs garder cmp( )
fonction, ou est-il caché l'utilisation de ce Python cmp( )
fonction ?
source d'informationauteur Thanakron Tandavas
Vous devez vous connecter pour publier un commentaire.
Il n'est pas très utile, c'est pourquoi il est déconseillé (la builtin
cmp
est parti et builtin sortes de ne plus accepter un en Python 3). Riche méthodes de comparaison supplanté:Cela permet à l'
<
symbole (et d'autres symboles) de la surcharge d'opérateurs de comparaison, permettant, par exemple, sur-ensemble sous-ensemble et comparaisons de définir des objets.alors qu'il pourrait permettre à la ci-dessus,
cmp
ne voudrais pas laisser les suivantes:Jouet d'utilisation pour
cmp
Voici une intéressante utilisation qui utilise sa raison comme un indice (elle renvoie -1 si le premier est inférieur au second, 0 en cas d'égalité, et 1 si elle est supérieure à):
Selon les docs, vous devez traiter cmp comme si elle n'était pas là:
https://docs.python.org/3/whatsnew/3.0.html#ordering-comparisons
cmp
supprimé, l'équivalent de l'opérationMais vous pouvez l'utiliser comme l'équivalent:
dans notre petit jouet fonction, c'est ceci:
Cela signifie: prendre la différence, et alors le signe de cette différence. Par exemple, si
x
ety
sont deux nombres:x < y
=>x - y < 0
et la fonction retourne -1.x == y
=>x - y == 0
et la fonction retourne 0.x > y
=>x - y > 0
et la fonction renvoie 1.Pour plus d'informations sur les trois comparaisons, voir Wikipedia.
Pour le tri des séquences d'éléments. Lorsque vous êtes le tri d'une liste d'éléments, vous avez seulement besoin de savoir d'un seul élément est supérieur ou inférieur à un autre élément.
Plus d'infos ici: http://wiki.python.org/moin/HowTo/Sorting/#The_Old_Way_Using_the_cmp_Parameter
Trivalued comparateurs sont très utiles lors du tri. Vous ne voulez pas seulement de savoir si les deux éléments sont égaux; vous aussi vous voulez savoir leur ordre relatif de sorte que vous savez comment les réorganiser afin de se rapprocher d'une liste triée. C'est pourquoi C (
strcmp
) et Perl (cmp
) ont tous deux opérations similaires (dans ces cas, pour les cordes, mais c'est la même idée).Si vous voulez savoir, ce que le signe (+/-) d'un nombre est, vous pouvez facilement utiliser
0
que le second argument de lacmp
fonction