นี่คือเคล็ดลับคำถามสำหรับการเล่นกอล์ฟในหลาม
ในหลาย ๆ กอล์ฟที่ฉันทำใน Python ค่าคงที่จะถูกกำหนดให้กับหนึ่งในสองตัวแปรที่เลือกโดยบูลีน ตัวแปรที่เลือกจะถูกเขียนทับโดยค่าที่กำหนดและตัวแปรอื่นจะไม่เปลี่ยนแปลง
17 ตัวอักษร:
if b:y=z
else:x=z
การกำหนดค่าตามเงื่อนไขนั้นเป็นเรื่องง่ายแต่การกำหนดให้กับตัวแปรตามเงื่อนไขนั้นดูเหมือนว่าเป็น clunky ฉันสงสัยว่ามีวิธีที่สั้นกว่าฉันหายไป
นี่จะเป็นเรื่องง่ายถ้าx,y
เป็นรายการL
แต่สมมติว่าบริบทต้องอ้างถึงตัวแปรที่เพียงพอในการเขียนL[0]
และL[1]
ห้ามปราม การแปลงใช้เวลานานเกินไป:
20 ตัวอักษร:
L=[x,y];L[b]=z;x,y=L
วิธีที่เร็วที่สุดที่ฉันรู้ก็คือกับ Python 2 exec
ซึ่งแปลกประหลาด:
16 ตัวอักษร Python 2:
exec"xy"[b]+"=z"
Tuple-selection ดูเหมือนจะยาวกว่า:
18, 19, 18, 18 ตัวอักษร:
x,y=b*(x,z)or(z,y)
x,y=[z,x,y,z][b::2]
y,x=[y,z,x][b:b+2]
y,x,*_=[y,z,x][b:] # Python 3
มีวิธีที่สั้นกว่าหรือการเพิ่มประสิทธิภาพการประหยัดอักขระ? คุณสามารถสันนิษฐานได้ว่าb
เป็น0
หรือ1
ไม่ใช่แค่ Falsey หรือ Truthy และยังตั้งสมมติฐานเกี่ยวกับชนิดข้อมูลและค่าหากช่วยได้
x,y=C(x,y,z,b)
(14 ตัวอักษร) และผลักดันใด ๆC
ของการใช้งานเหล่านี้เข้าไปในร่างกายของ