Je ne comprends pas pourquoi Python n'a pas de sign
fonction. Il a un abs
intégré (que je considère comme sign
la sœur de), mais non sign
.
En python 2.6, il y a même une copysign
fonction (en mathématiques ), mais aucun signe. Pourquoi prendre la peine d'écrire un copysign(x,y)
alors que vous pourriez simplement écrire un sign
, puis obtenir copysign
directement le abs(x) * sign(y)
? Ce dernier serait beaucoup plus clair: x avec le signe de y, alors qu'avec copysign il faut se rappeler si c'est x avec le signe de y ou y avec le signe de x!
Évidemment, sign(x)
cela ne fournit rien de plus que cela cmp(x,0)
, mais ce serait beaucoup plus lisible que cela aussi (et pour un langage très lisible comme python, cela aurait été un gros plus).
Si j'étais un concepteur de python, j'aurais été dans l'autre sens: pas de cmp
builtin, mais a sign
. Lorsque vous en avez besoin cmp(x,y)
, vous pouvez simplement faire un sign(x-y)
(ou, encore mieux pour les choses non numériques, juste un x> y - bien sûr, cela aurait dû nécessiter l' sorted
acceptation d'un booléen au lieu d'un comparateur entier). Ce serait aussi plus clair: positif quand x>y
(alors qu'avec cmp
vous il faut se souvenir de la convention positive quand la première est plus grosse , mais ça pourrait être l'inverse). Bien sûr, cmp
cela a du sens en soi pour d'autres raisons (par exemple lors du tri de choses non numériques, ou si vous voulez que le tri soit stable, ce qui n'est pas possible en utilisant simplement un booléen)
Donc, la question est: pourquoi le ou les concepteurs Python ont-ils décidé de laisser la sign
fonction hors du langage? Pourquoi diable dérange-t-il copysign
et non pas son parent sign
?
Suis-je en train de manquer quelque chose?
EDIT - après le commentaire de Peter Hansen. Assez juste que vous ne l'avez pas utilisé, mais vous n'avez pas dit pourquoi vous utilisez python. En 7 ans que j'utilise le python, j'en ai eu besoin d'innombrables fois, et la dernière est la paille qui a cassé le dos du chameau!
Oui, vous pouvez passer le cmp, mais 90% des fois où j'ai eu besoin de le passer, c'était dans un idiome comme
lambda x,y: cmp(score(x),score(y))
ça aurait très bien fonctionné avec le signe.
Enfin, j'espère que vous conviendrez que ce sign
serait plus utile que copysign
, donc même si j'ai acheté votre point de vue, pourquoi vous soucier de définir cela en mathématiques, au lieu de signer? Comment le copysign peut-il être aussi utile que signer?