Python'un neden bir sign
işlevi olmadığını anlayamıyorum . Bir abs
yerleşkesi var (ki sign
kı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 sign
sonra olsun copysign
doğ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: cmp
yerleş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 sorted
bunun 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 cmp
ne zaman kongre Pozitif hatırlamak zorunda ilk olan büyük , ancak tersi olabilir). Tabii ki cmp
baş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ı sign
işlevi neden dil dışında bırakmaya karar verdiler ? Heck neden copysign
ebeveyni 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 sign
bunun 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?