Python: One liner (Single line) เมื่อทุกอย่าง short and concise

Grassroot Engineer
3 min readApr 16, 2022

--

https://www.amazon.com/Python-One-Liners-Concise-Eloquent-Professional-ebook/dp/B07ZY7XMX8

หลายๆครั้งที่เวลาเราไปอ่าน code ชาวบ้านเขาแล้วไม่เข้าใจ หรือ แม้กระทั่ง code ที่เราเขียนเอง แต่ยาวมากๆซึ่งจริงๆก็รู้แหละว่ามันน่าจะเขียนให้สั้นกว่านี้ได้ แต่ไม่รู้ว่าต้องเขียนยังไง

มาคับ สำหรับบทความนี้ผมจะเล่าให้ฟัง

1. if-else condition

Single if condition

ถ้า if อย่างเดียว เราจะใส่ else ให้เป็น None ไว้นะคับ (คือไม่ทำอะไร)

Single if-else condition

Single if-else condition.

Multiple if-else condition (แต่ถ้าเป็น Multiple แบบนี้ Interpreter มันจะด่าเราเองคับ แบบเฮ้ย…ไม่แนะนำนะ แยกออกมาดีกว่า)

Multiple if-else condition

2. List comprehension

ใช้ for loop และ append มาเก็บไว้เป็น list

ซึ่งเราสามารถกำหนดเงื่อนไขใน single line ได้ด้วยเช่นกัน

เพิ่มเงื่อนไขสำหรับ single line of for-loop

จากรูปด้านบน เมื่อเป็น for-loop with if เราจะใส่ if ไว้ด้านหลัง แต่ถ้าเมื่อใดก็ตามที่เป็น if-else ภายใน for-loop เราจะต้องเปลี่ยนใหม่ นำมาไว้ด้านหน้านะคับแบบนี้

if-else in for looop when convet to single line.
กรณี for-loop 2 ชั้น และมีเงื่อนไขก็สามารถแปลงเป็น single line ได้เช่นกัน

3. Dictionary comprehension

Convert normal dict to one-line dict
Dict with if conditon when convert to one-line dict

แต่ถ้าเป็น case ของ if-else ล่ะ เดาได้เลยใช่ไหม ว่าต้องทำเหมือนกับ list คือ จะย้าย if ด้านหลัง มาไว้ด้านหน้าของ for-loop แทนแบบนี้เลย

Case if-else in dict when convert to one-line dict.

4. Swapping two variables

คือ เวลาที่เราจะสลับตัวแปรกันเนี่ย เราจะต้องเขียนหลายบรรทัดเลย เช่น

จากที่ Q มีเงินอยุ่ 100 บาท และ Pim ไม่มีเลย เมื่อเราจะสลับกัน จะต้องมี buffer มาเก็บค่าเงินของ Q ไว้ก่อน

Q = 100
Pim = 'No_money'
buffer = Q
print(Q, Pim) # จะได้ 100 No_moneyQ = Pim
Pim = buffer
print(Q, Pim)
# ถูกสลับให้เป็น No_money 100 แล้ว

งงไหมคับ คือ ต้องการจะสลับค่าระหว่าง Q กับ Pim นั่นเอง แต่ต้องเขียนหลายบรรทัดมาก เอาใหม่นะ…ถ้าเขียนเป็น one line เพียงแค่นี้เลย

Swapping with one-line.

หรือ ถ้าต้องการ swap มากกว่า 2 variables ก้ทำได้นะคับ แค่สลับให้ถูกแบบนี้เลย จากตอนแรกที่ Q มี 100 จึงถูกแทนที่ด้วย Q เป็น No_money แทน, ค่าอื่นก็เช่นกัน

Swapping 3 variables

5. Multiple variables assignment

ในการ assign ตัวแปร ก้อทำได้เช่นเดียวกันนะคับ คือ สามารถบรรจุในบรรทัดเดียวได้เลยแบบนี้ (แม้ว่าจะคนละ data type ก็ไม่เป็นไร)

Assign หลายๆตัวแปร in one-line

ในเคสที่มีหลายๆ elements เราสามารถใช้ * ที่เป็นตัวแทนของ args ได้ด้วย เช่น

Assing multiple elements by args (*)

6. Global variables

โดยปกติการประกาศ global variable ภายใน function เพื่อให้นอก function เรียกใช้ได้ จะใช้ keyword global หน้าตัวแปรนะคับ แบบนี้

การประกาศ global ให้กับตัวแปร

แต่มันสามารถประกาศแบบนี้ได้เลย โดยใช้ฟังก์ชัน globals().update()โดยใส่ค่าของตัวแปรที่ต้องการให้เป็น global ไว้ด้านในของฟังก์ชัน update()นะ แบบนี้

ใช้ globals().update() แทนที่การสร้าง global แบบปกติ (แต่ขอไม่แนะนำ)

7. Lambda function

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 ตามในตาราง

https://byjus.com/maths/fibonacci-sequence/

แต่ถ้าเราต้องเขียนเป็น one-line ล่ะ

lambda with if-else condition in one-line

If you think it’s useful for you, just clap your hands 👏 to be encouraged me.

แล้วพบกันใหม่คับ
GRASSROOT ENGINEER 😘

--

--

Grassroot Engineer
Grassroot Engineer

Written by Grassroot Engineer

ATM engineer who is interested in CODING and believe in EFFORT. — https://grassrootengineer.com

No responses yet