ฉันไม่เข้าใจว่าทำไม Python จึงไม่มีsignฟังก์ชั่น มันมีabsในตัว (ซึ่งผมคิดว่าsignน้องสาว) signแต่ไม่มี
ใน python 2.6 มีcopysignฟังก์ชั่น (ในทางคณิตศาสตร์ ) แต่ไม่มีสัญญาณ ทำไมต้องเขียน a copysign(x,y)เมื่อคุณสามารถเขียน a signและได้รับcopysignโดยตรงจากabs(x) * sign(y)? หลังจะชัดเจนกว่านี้มาก: x ด้วยสัญลักษณ์ของ y ในขณะที่ copysign คุณต้องจำไว้ว่าถ้ามันเป็น x กับสัญลักษณ์ของ y หรือ y ด้วยสัญลักษณ์ของ x!
เห็นได้ชัดsign(x)ว่าไม่ได้ให้อะไรมากไปกว่าcmp(x,0)แต่มันจะอ่านได้ง่ายกว่านี้อีกด้วย (และสำหรับภาษาที่อ่านได้อย่างมากเช่นไพ ธ อนมันน่าจะเป็นข้อดีอย่างมาก)
ถ้าฉันเป็นนักออกแบบหลามผมจะได้รับวิธีการอื่น ๆ arond: ไม่มีcmpbuiltin signแต่ เมื่อคุณต้องการcmp(x,y)คุณสามารถทำsign(x-y)(หรือดียิ่งขึ้นสำหรับสิ่งที่ไม่ใช่ตัวเลขเพียงแค่ x> y - แน่นอนว่าสิ่งนี้ต้องได้sortedรับการยอมรับบูลีนแทนที่จะเป็นตัวเปรียบเทียบจำนวนเต็ม) สิ่งนี้จะมีความชัดเจนมากขึ้น: เป็นบวกเมื่อx>y(ในขณะที่cmpคุณต้องจำการประชุมเชิงบวกเมื่อแรกมีขนาดใหญ่กว่าแต่อาจเป็นวิธีอื่น ๆ ) แน่นอนว่ามีcmpเหตุผลในตัวเองสำหรับเหตุผลอื่น ๆ (เช่นเมื่อเรียงลำดับสิ่งที่ไม่ใช่ตัวเลขหรือหากคุณต้องการเรียงลำดับให้มีความเสถียรซึ่งไม่สามารถใช้กับบูลีนได้)
ดังนั้นคำถามคือ: ทำไมผู้ออกแบบ Python ตัดสินใจเลิกsignฟังก์ชั่นนอกภาษา ทำไมห่าก็รบกวนด้วยcopysignและไม่ใช่พ่อแม่sign?
ฉันพลาดอะไรไปรึเปล่า?
แก้ไข - หลังจากความคิดเห็นของ Peter Hansen ยุติธรรมพอที่คุณไม่ได้ใช้ แต่คุณไม่ได้พูดในสิ่งที่คุณใช้หลาม ใน 7 ปีที่ฉันใช้หลามฉันต้องการมันนับครั้งไม่ถ้วนและอันสุดท้ายคือฟางที่หักหลังอูฐ!
ใช่คุณสามารถผ่าน cmp ไปได้ แต่ 90% ของจำนวนครั้งที่ฉันต้องผ่านมันเป็นสำนวนแบบ
lambda x,y: cmp(score(x),score(y))ที่จะใช้กับสัญญาณได้ดี
ในที่สุดฉันหวังว่าคุณจะเห็นว่าsignจะมีประโยชน์มากกว่าcopysignดังนั้นแม้ว่าฉันจะซื้อมุมมองของคุณทำไมต้องกังวลกับการกำหนดในคณิตศาสตร์แทนที่จะเป็นสัญญาณ? copysign มีประโยชน์มากกว่าเครื่องหมายอย่างไร