Ich kann nicht verstehen, warum Python keine sign
Funktion hat. Es hat ein abs
eingebautes (was ich als sign
Schwester betrachte), aber neinsign
.
In Python 2.6 gibt es sogar eine copysign
Funktion (in Mathe ), aber kein Vorzeichen. Warum sich die Mühe machen, eine zu schreiben, copysign(x,y)
wenn man einfach eine schreiben sign
und dann die copysign
direkt von bekommen könnte abs(x) * sign(y)
? Letzteres wäre viel klarer: x mit dem Vorzeichen von y, während Sie beim Copysign daran denken müssen, ob es x mit dem Vorzeichen von y oder y mit dem Vorzeichen von x ist!
Offensichtlich sign(x)
bietet nichts mehr alscmp(x,0)
, aber es wäre viel besser lesbar als dies (und für eine gut lesbare Sprache wie Python wäre dies ein großes Plus gewesen).
Wenn ich ein Python-Designer wäre, wäre ich umgekehrt: kein cmp
eingebauter, aber ein sign
. Wenn Sie brauchen cmp(x,y)
, können Sie einfach ein sign(x-y)
(oder, noch besser für nicht numerische Dinge, nur ein x> y - natürlich hätte dies das sorted
Akzeptieren eines Booleschen Wertes anstelle eines ganzzahligen Komparators erfordern müssen ). Dies wäre auch klar: positiv , wenn x>y
(während bei cmp
Ihnen müssen die Konvention positiv erinnern , als der erste ist größer , aber es könnte umgekehrt sein). Natürlichcmp
macht es aus anderen Gründen Sinn (z. B. beim Sortieren nicht numerischer Dinge oder wenn Sie möchten, dass die Sortierung stabil ist, was mit einem einfachen Booleschen Wert nicht möglich ist).
Die Frage ist also: Warum haben die Python-Designer beschlossen, die sign
Funktion aus der Sprache herauszulassen? Warum zum Teufel mit copysign
und nicht mit seinen Eltern ?sign
?
Vermisse ich etwas
EDIT - nach Peter Hansen Kommentar. Fair genug, dass Sie es nicht benutzt haben, aber Sie haben nicht gesagt, wofür Sie Python verwenden. In 7 Jahren, in denen ich Python benutze, brauchte ich es unzählige Male, und der letzte ist der Strohhalm, der dem Kamel den Rücken gebrochen hat!
Ja, Sie können cmp weitergeben, aber 90% der Fälle, in denen ich es weitergeben musste, waren in einer solchen Sprache
lambda x,y: cmp(score(x),score(y))
, die mit sign gut funktioniert hätte.
Schließlich hoffe ich, dass Sie zustimmen, dass sign
dies nützlicher wäre als copysign
. Selbst wenn ich Ihre Ansicht gekauft hätte, warum sollten Sie sich die Mühe machen, dies in Mathematik zu definieren, anstatt zu unterschreiben? Wie kann Copysign so nützlich sein als Sign?