Tôi không thể hiểu tại sao Python không có signchức năng. Nó có một absnội trang (mà tôi coi signlà em gái), nhưng không sign.
Trong python 2.6 thậm chí còn có một copysignhàm (trong toán học ), nhưng không có dấu. Tại sao phải viết một copysign(x,y)khi bạn chỉ có thể viết một signvà sau đó nhận được copysigntrực tiếp từ abs(x) * sign(y)? Điều thứ hai sẽ rõ ràng hơn nhiều: x với dấu của y, trong khi với copysign bạn phải nhớ nếu đó là x với dấu của y hoặc y với dấu của x!
Rõ ràng là sign(x)không cung cấp bất cứ điều gì nhiều hơn cmp(x,0), nhưng nó cũng sẽ dễ đọc hơn nhiều (và đối với một ngôn ngữ rất dễ đọc như python, đây sẽ là một điểm cộng lớn).
Nếu tôi là một nhà thiết kế trăn, tôi sẽ là một cách khác: không có cmpnội dung, nhưng a sign. Khi bạn cần cmp(x,y), bạn chỉ có thể làm một sign(x-y)(hoặc, thậm chí tốt hơn cho các công cụ không phải là số, chỉ là x> y - tất nhiên điều này cần phải sortedchấp nhận một boolean thay vì so sánh số nguyên). Điều này cũng sẽ được rõ ràng hơn: tích cực khi x>y(trong khi với cmpbạn phải nhớ dương tính ước khi đầu tiên là lớn hơn , nhưng nó có thể là con đường xung quanh khác). Tất nhiên cmpcó ý nghĩa riêng vì những lý do khác (ví dụ: khi sắp xếp những thứ không phải là số hoặc nếu bạn muốn sắp xếp ổn định, điều này không thể sử dụng chỉ với boolean)
Vì vậy, câu hỏi là: tại sao (các) nhà thiết kế Python quyết định bỏ signchức năng này khỏi ngôn ngữ? Tại sao quái vật bận tâm với copysignvà không phải cha mẹ của nó sign?
Tui bỏ lỡ điều gì vậy?
EDIT - sau khi Peter Hansen bình luận. Đủ công bằng khi bạn không sử dụng nó, nhưng bạn không nói bạn dùng python để làm gì. Trong 7 năm tôi sử dụng trăn, tôi cần nó vô số lần và lần cuối cùng là ống hút làm vỡ lưng con lạc đà!
Vâng, bạn có thể vượt qua cmp xung quanh, nhưng 90% số lần tôi cần để vượt qua nó là trong một thành ngữ như thế
lambda x,y: cmp(score(x),score(y))sẽ hoạt động với dấu hiệu tốt.
Cuối cùng, tôi hy vọng bạn đồng ý rằng nó signsẽ hữu ích hơn copysign, vì vậy ngay cả khi tôi đã mua quan điểm của bạn, tại sao phải bận tâm về việc xác định điều đó trong toán học, thay vì ký? Làm thế nào copysign có thể hữu ích hơn nhiều so với dấu hiệu?