なぜPythonにsign関数がないのか理解できません。それは持っているabs(私は考える組み込みsignの妹)が、ありませんsign。
Python 2.6にはcopysign(mathの)関数さえありますが、符号はありません。なぜcopysign(x,y)a signと書いて、copysign直接から直接得ることができるのに、わざわざaを書くのabs(x) * sign(y)ですか?後者の方がはるかに明確です。xにyの符号が付いているのに対し、copysignでは、xがyの符号を持つか、yがxの符号を持つかを覚えておく必要があります。
明らかにsign(x)以外のものは何も提供しませんcmp(x,0)が、これもはるかに読みやすくなります(Pythonのような非常に読みやすい言語の場合、これは大きなプラスになります)。
もし私がpythonデザイナーだったら、私はその逆でした:cmp組み込みではなくsign。必要なcmp(x,y)場合は、単にaを実行することができますsign(x-y)(または、数値以外の場合はx> yを使用します-もちろん、これにはsorted整数コンパレータの代わりにブール値を受け入れる必要があります)。これはより明確になります:正の場合x>y(一方cmp、最初の規則が大きい場合は、規則を正に覚えておく必要がありますが、逆の場合もあります)。もちろんcmp、他の理由でそれ自体が理にかなっています(たとえば、非数値のものを並べ替えるとき、または並べ替えを安定させたい場合、単純にブール値では使用できません)。
では、問題は次のとおりです。なぜPythonデザイナーはsign関数を言語から除外することにしたのですか?なぜ一体copysignは親ではなく気になるのsignですか?
何か不足していますか?
編集-ピーターハンセンコメントの後。あなたがそれを使用しなかったが、Pythonを何のために使用するかを言っていないほど十分に公平です。私がpythonを使用していた7年間で、私は何度もそれを必要としました、そして最後はラクダの背中を壊したストローです!
はい、CMPを渡すことができますが、合格する必要があった時間の90%は、lambda x,y: cmp(score(x),score(y))記号でうまく機能するようなイディオムでした
。
最後に、私はあなたsignがそれよりも有用であることをあなたが同意することを望みますcopysign、それで私があなたの見解を買ったとしても、なぜそれを符号の代わりに数学で定義することに悩むのですか?どのようにして、コピーサインはサインよりも非常に便利ですか?