Я не могу понять, почему у Python нет функции sign
. Он имеет встроенный abs
(который я считаю сестрой sign
), но не sign
.
В python 2.6 существует даже функция copysign
(в math), но нет знака. Зачем писать copysign(x,y)
, когда вы могли бы просто написать sign
, а затем получить copysign
непосредственно из abs(x) * sign(y)
? Последнее было бы намного яснее: x со знаком y, тогда как с copysign вы должны помнить, если он x со знаком y или y со знаком x!
Очевидно, что sign(x)
не предоставляет ничего больше, чем cmp(x,0)
, но было бы гораздо более читаемым, что это тоже (и для сильно читаемого языка, такого как python, это было бы большим плюсом).
Если бы я был дизайнером python, я был бы другим способом: no cmp
builtin, но sign
. Когда вам нужно cmp(x,y)
, вы можете просто сделать sign(x-y)
(или, что еще лучше, для не численного материала, просто x > y), конечно, это должно было потребовать sorted
принятия логического значения вместо целочисленного компаратора). Это также было бы более ясным: положительный, когда x>y
(тогда как cmp
вы должны помнить соглашение положительное, когда first больше, но это может быть наоборот). Конечно, cmp
имеет смысл по своему усмотрению по другим причинам (например, при сортировке нечисловых вещей или если вы хотите, чтобы сортировка была стабильной, что невозможно использовать с помощью простого логического выражения)
Итак, возникает вопрос: почему разработчики Python решили оставить функцию sign
вне языка? Почему черт не беспокоиться с copysign
, а не его родителем sign
?
Я что-то пропустил?
EDIT - после комментария Питера Хансена. Достаточно справедливо, что вы его не использовали, но вы не сказали, для чего вы используете python. Через 7 лет, когда я использую python, мне нужно было много раз, а последняя - соломинкой, которая сломала верблюда!
Да, вы можете передать cmp, но 90% времени, которое мне нужно было передать, было в идиоме вроде
lambda x,y: cmp(score(x),score(y))
, который отлично работал бы со знаком.
Наконец, я надеюсь, вы согласитесь, что sign
был бы более полезен, чем copysign
, поэтому, даже если бы я купил ваше мнение, зачем беспокоиться об определении этого в математике вместо того, чтобы подписывать? Как copysign может быть так полезен, как знак?