Saya tidak mengerti mengapa Python tidak memiliki signfungsi. Itu memilikiabs builtin (yang saya anggap signsaudara perempuan), tetapi tidaksign .
Dalam python 2.6 bahkan ada copysignfungsi (dalam matematika ), tetapi tidak ada tanda. Mengapa repot - repot menulis copysign(x,y)ketika Anda hanya bisa menulis signdan 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 cmpbuiltin, 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 sortedmenerima boolean daripada pembanding integer). Ini juga akan lebih jelas: positif ketika x>y(sedangkan dengan cmpAnda 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 signfungsi ini dari bahasa? Kenapa sih repot-repot dengan copysigndan 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 signakan 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?