Saya tidak mengerti mengapa Python tidak memiliki sign
fungsi. Itu memilikiabs
builtin (yang saya anggap sign
saudara perempuan), tetapi tidaksign
.
Dalam python 2.6 bahkan ada copysign
fungsi (dalam matematika ), tetapi tidak ada tanda. Mengapa repot - repot menulis copysign(x,y)
ketika Anda hanya bisa menulis sign
dan kemudian mendapatkancopysign
langsung dariabs(x) * sign(y)
? Yang terakhir akan jauh lebih jelas: x dengan tanda y, sedangkan dengan copysign Anda harus ingat apakah x dengan tanda y atau y dengan tanda x!
Jelas sekali sign(x)
tidak memberikan apa pun selaincmp(x,0)
, tetapi akan jauh lebih mudah dibaca bahwa ini juga (dan untuk bahasa yang sangat mudah dibaca seperti python, ini akan menjadi nilai tambah yang besar).
Jika saya seorang desainer python, saya akan menjadi sebaliknya: tidak ada cmp
builtin, tapi a sign
. Ketika Anda membutuhkan cmp(x,y)
, Anda bisa melakukan sign(x-y)
(atau, bahkan lebih baik untuk hal-hal non-numerik, hanya x> y - tentu saja ini seharusnya mengharuskan sorted
menerima boolean daripada pembanding integer). Ini juga akan lebih jelas: positif ketika x>y
(sedangkan dengan cmp
Anda harus ingat konvensi positif ketika pertama adalah lebih besar , tapi bisa jalan di sekitar lainnya). Tentu sajacmp
masuk akal sendiri karena alasan lain (misalnya ketika mengurutkan hal-hal non-numerik, atau jika Anda ingin jenis menjadi stabil, yang tidak mungkin digunakan hanya dengan boolean)
Jadi, pertanyaannya adalah: mengapa perancang Python memutuskan untuk meninggalkan sign
fungsi ini dari bahasa? Kenapa sih repot-repot dengan copysign
dan bukan induknya sign
?
Apakah saya melewatkan sesuatu?
EDIT - setelah Peter Hansen berkomentar. Cukup adil sehingga Anda tidak menggunakannya, tetapi Anda tidak mengatakan untuk apa Anda menggunakan python. Dalam 7 tahun saya menggunakan python, saya membutuhkannya berkali-kali, dan yang terakhir adalah sedotan yang mematahkan punggung unta!
Ya, Anda dapat melewati cmp sekitar, tetapi 90% dari waktu yang saya butuhkan untuk lulus itu dalam ungkapan seperti
lambda x,y: cmp(score(x),score(y))
itu akan bekerja dengan tanda baik-baik saja.
Akhirnya, saya harap Anda setuju bahwa sign
akan lebih bermanfaat daripada copysign
, jadi bahkan jika saya membeli pandangan Anda, mengapa repot-repot mendefinisikannya dalam matematika, alih-alih tanda? Bagaimana copysign lebih berguna daripada tanda?