Python: One liner (Single line) เมื่อทุกอย่าง short and concise
หลายๆครั้งที่เวลาเราไปอ่าน code ชาวบ้านเขาแล้วไม่เข้าใจ หรือ แม้กระทั่ง code ที่เราเขียนเอง แต่ยาวมากๆซึ่งจริงๆก็รู้แหละว่ามันน่าจะเขียนให้สั้นกว่านี้ได้ แต่ไม่รู้ว่าต้องเขียนยังไง
มาคับ สำหรับบทความนี้ผมจะเล่าให้ฟัง
1. if-else condition
Single if condition
Single if-else condition
Multiple if-else condition
(แต่ถ้าเป็น Multiple แบบนี้ Interpreter มันจะด่าเราเองคับ แบบเฮ้ย…ไม่แนะนำนะ แยกออกมาดีกว่า)
2. List comprehension
ซึ่งเราสามารถกำหนดเงื่อนไขใน single line ได้ด้วยเช่นกัน
จากรูปด้านบน เมื่อเป็น for-loop with if เราจะใส่ if ไว้ด้านหลัง แต่ถ้าเมื่อใดก็ตามที่เป็น if-else ภายใน for-loop เราจะต้องเปลี่ยนใหม่ นำมาไว้ด้านหน้านะคับแบบนี้
3. Dictionary comprehension
แต่ถ้าเป็น case ของ if-else ล่ะ เดาได้เลยใช่ไหม ว่าต้องทำเหมือนกับ list คือ จะย้าย if ด้านหลัง มาไว้ด้านหน้าของ for-loop แทนแบบนี้เลย
4. Swapping two variables
คือ เวลาที่เราจะสลับตัวแปรกันเนี่ย เราจะต้องเขียนหลายบรรทัดเลย เช่น
จากที่ Q มีเงินอยุ่ 100 บาท และ Pim ไม่มีเลย เมื่อเราจะสลับกัน จะต้องมี buffer มาเก็บค่าเงินของ Q ไว้ก่อน
Q = 100
Pim = 'No_money'
buffer = Qprint(Q, Pim) # จะได้ 100 No_moneyQ = Pim
Pim = buffer
print(Q, Pim) # ถูกสลับให้เป็น No_money 100 แล้ว
งงไหมคับ คือ ต้องการจะสลับค่าระหว่าง Q
กับ Pim
นั่นเอง แต่ต้องเขียนหลายบรรทัดมาก เอาใหม่นะ…ถ้าเขียนเป็น one line เพียงแค่นี้เลย
หรือ ถ้าต้องการ swap มากกว่า 2 variables ก้ทำได้นะคับ แค่สลับให้ถูกแบบนี้เลย จากตอนแรกที่ Q มี 100
จึงถูกแทนที่ด้วย Q เป็น No_money
แทน, ค่าอื่นก็เช่นกัน
5. Multiple variables assignment
ในการ assign ตัวแปร ก้อทำได้เช่นเดียวกันนะคับ คือ สามารถบรรจุในบรรทัดเดียวได้เลยแบบนี้ (แม้ว่าจะคนละ data type ก็ไม่เป็นไร)
ในเคสที่มีหลายๆ elements เราสามารถใช้ *
ที่เป็นตัวแทนของ args ได้ด้วย เช่น
6. Global variables
โดยปกติการประกาศ global variable ภายใน function เพื่อให้นอก function เรียกใช้ได้ จะใช้ keyword global
หน้าตัวแปรนะคับ แบบนี้
แต่มันสามารถประกาศแบบนี้ได้เลย โดยใช้ฟังก์ชัน globals().update()
โดยใส่ค่าของตัวแปรที่ต้องการให้เป็น global ไว้ด้านในของฟังก์ชัน update()นะ แบบนี้
globals().update()
แทนที่การสร้าง global แบบปกติ (แต่ขอไม่แนะนำ)7. Lambda function
Lambda function เป็นอะไรที่ผมชอบมาก รู้สึกมันสร้างมาเพื่อตอบโจทย์จริงๆ อ่านเพิ่มเติมได้ ที่นี่ เลยคับ
ในเคสที่ lambda มี if-else อยู่ภายในด้วย เช่น Fibonancci จะเขียนยังไง นี่คือ function ปกติในการหา fibonanci นะ
def fib(n):
if n in [0, 1, 2]:
return 1
else:
return fib(n-1) + fib(n-2)print(fib(9)) # 34
เมื่อ n=9 จึงได้ค่า = 34 ตามในตาราง
แต่ถ้าเราต้องเขียนเป็น one-line ล่ะ
If you think it’s useful for you, just clap your hands 👏 to be encouraged me.
แล้วพบกันใหม่คับ
GRASSROOT ENGINEER 😘
References:
https://youtu.be/2iQjQapJvkE