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