ฉันจะใช้ cmp (a, b) กับ Python3 ได้อย่างไร


16

ผมก็บอกว่าการใช้cmpฟังก์ชั่นสามารถเป็นประโยชน์อย่างมากในรหัสกอล์ฟ แต่น่าเสียดายที่ Python 3 ไม่มีcmpฟังก์ชั่น

ดังนั้นการเทียบเท่าสั้นที่สุดของcmpที่ทำงานในหลาม 3 คืออะไร?


3
คุณควรชี้แจงว่าคุณกำลังมองหาcmpหรือทางเลือกอื่นในบริบทของการเล่นกอล์ฟ มิฉะนั้นสิ่งนี้อาจถูกปิดเนื่องจากคำถามการเขียนโปรแกรมทั่วไปอย่างรวดเร็ว
Martin Ender

@ MartinBüttnerฉันคิดว่านี่เป็นบริบทของคำถามคำแนะนำการเล่นกอล์ฟของ OP ซึ่งเป็นคำตอบที่ใช้cmpแม้ว่าคำถามจะขอ Python 3
xnor

@ xnor ฉันรู้ว่ามันเป็น แต่คนอื่นอาจไม่
Martin Ender

หากเป็นประโยชน์ที่จะทราบคุณสามารถใช้cmp(a,b)ใน Python 2
mbomb007

คำตอบ:


34

งูหลาม 3 cmpไม่ได้ สำหรับการเล่นกอล์ฟคุณสามารถทำได้

11 ตัวอักษร

(a>b)-(a<b)

ซึ่งสูญเสีย 3 cmp(a,b)ตัวอักษรมากกว่า

น่าแปลกใจที่นี่ยังเป็นวิธีแก้ปัญหา "เป็นทางการ" หน้ามีอะไรใหม่ใน Python 3พูดว่า "(หากคุณต้องการcmp()ฟังก์ชั่นการใช้งานจริงคุณสามารถใช้นิพจน์(a > b) - (a < b)แทนcmp(a, b)ได้)"


15
ระวังปัญหาก่อนหน้า! ค่า cmp (a, b) ที่แท้จริงคือ ((a> b) - (a <b))
Sparr

ถ้า a หรือ b เป็นนิพจน์ที่มีความซับซ้อนมากขึ้น - พูดการเรียกใช้ฟังก์ชันที่มีระยะเวลาใช้งานนานมากนี่เป็นสิ่งที่แย่มากสำหรับเวลาทำงาน ยิ่งไปกว่านั้นถ้า a หรือ b มีการเรียกใช้ฟังก์ชันที่มีผลข้างเคียงสิ่งนี้สามารถเปลี่ยนความหมายของโปรแกรมของคุณได้
Algoman

1
@Algoman Oh noes, เวลาทำงาน, ส่วนที่สำคัญที่สุดของ code-golfing / s หากคุณต้องการหลีกเลี่ยงการเรียกใช้ฟังก์ชั่นสองครั้งเพียงกำหนดให้ตัวแปรล่วงหน้า (ซึ่งคุณอาจจะต้องลงมือทำต่อไปเพื่อประหยัดไบต์)
Jo King

ฉันกำลังทำงานกับ transpiler - มันอ่านนิพจน์และควรสร้างนิพจน์จากมัน cmp นั้นในนิพจน์ดั้งเดิมนั้นสามารถซ้อนกันได้อย่างลึกล้ำ มันจะน่าเกลียดและยากมาก (ถ้าไม่เป็นไปไม่ได้) ในการนำไปใช้ถ้าฉันต้องสร้างรหัสเป้าหมายแบบนั้น
Algoman

1
@Algoman ดังนั้นแทนที่ด้วยcmp(exp1,exp2) (lambda a,b:(a>b)-(a<b))(exp1,exp2)
Anders Kaseorg
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.