Python'un neden bir signişlevi olmadığını anlayamıyorum . Bir absyerleşkesi var (ki signkız kardeşi olduğunu düşünüyorum ), ama hayır sign.
Python 2.6'da copysign( matematikte ) bir işlev bile var , ancak işaret yok. Neden yazmaya zahmet copysign(x,y)sen sadece bir yazabilirsiniz zaman signsonra olsun copysigndoğrudan abs(x) * sign(y)? İkincisi çok daha açık olacaktır: x y işareti ile, copysign ile x'in y işareti veya y işareti ile x olup olmadığını hatırlamanız gerekir!
Açıkçası sign(x)bundan başka bir şey sağlamaz cmp(x,0), ancak bunun da çok daha okunabilir olması gerekir (ve python gibi büyük ölçüde okunabilir bir dil için bu büyük bir artı olurdu).
Eğer bir python tasarımcısı olsaydım, başka bir yol olurdu: cmpyerleşik değil, ama sign. İhtiyacınız olduğunda cmp(x,y), sadece bir sign(x-y)(veya sayısal olmayan şeyler için daha iyi, sadece x> y - elbette sortedbunun bir tamsayı karşılaştırıcısı yerine bir boole kabul etmesini gerektiriyordu ). Bu aynı zamanda daha açık olacaktır: pozitif olduğunda x>y(oysa ile cmpne zaman kongre Pozitif hatırlamak zorunda ilk olan büyük , ancak tersi olabilir). Tabii ki cmpbaşka nedenlerle kendi başına mantıklıdır (örneğin, sayısal olmayan şeyleri sıralarken veya sıralamanın istikrarlı olmasını istiyorsanız, bu sadece bir boole ile kullanılması mümkün değildir)
Peki, soru şu: Python tasarımcıları signişlevi neden dil dışında bırakmaya karar verdiler ? Heck neden copysignebeveyni ile uğraşmıyor sign?
Bir şey mi kaçırıyorum?
EDIT - Peter Hansen yorum yaptıktan sonra. Kullanmamanız için yeterince adil, ama python için ne kullandığınızı söylemediniz. Python kullandığım 7 yıl içinde, sayısız kez ihtiyacım vardı ve son olarak devenin sırtını kıran saman!
Evet, cmp'yi etrafta geçirebilirsiniz, ancak geçmek için ihtiyaç duyduğum zamanların% 90'ı, böyle lambda x,y: cmp(score(x),score(y))iyi bir işaretle çalışacak gibi bir deyimdeydi
.
Son olarak, umarım signbunun bundan daha yararlı olacağını kabul edersiniz copysign, bu yüzden görüşünüzü alsam bile, neden bunu işaret yerine matematikte tanımlamakla uğraşasınız? Copysign, işaretten çok nasıl yararlı olabilir?