Tutorial

Switch-Case ทิพย์บน Python 3.10 ในที่สุด ก็มีสักที

By Arnon Puitrakul - 11 ตุลาคม 2021

Switch-Case ทิพย์บน Python 3.10 ในที่สุด ก็มีสักที

เวลาเราสอน Python หลาย ๆ คนที่เคยเขียนโปรแกรมภาษาอื่น ๆ อย่างพวก C มาก่อนแล้ว ก็จะถามว่า พี่ แล้ว Python ไม่มี Switch Case เหมือนใน C เหรอ ใช่แล้ว มันไม่มีแหละ ก็ต้อง if ไป แต่วันนี้ Python 3.10 ออก Release เต็มแล้ว และมี Feature ใหม่ที่ถามหากันทั่วคือ Switch Case หรือที่ฝั่ง Python เองเรียกว่า Pattern Matching เรามาลองใช้งานกันขำ ๆ

ปล. การจะใช้งาน Pattern Matching เราจะต้องใช้ Python 3.10 หรือสูงกว่านะ ถ้าใช้ Conda ก็สร้าง Environment ใหม่ไว้ลองได้เลย

Pattern Matching

selected_option = input('Please input the option')

match selected_option:
    case 1:
    	print('Order has selected')
    case 2:
    	print('Admin mode has selected')
    case _:
    	print('Bye')

Syntax ของมันทำมาในรูปแบบตัวอย่างด้านบนคือ จะเริ่มด้วยคำว่า match ก่อน แล้วตามด้วยตัวแปรที่เราต้องการจะตรวจสอบ จากนั้น ใน Block จะเป็นแต่ละเคสแล้วว่ามันจะเป็นอะไร เช่น case 1 ก็คือถ้า selected_option เป็น 1 มันก็จะทำงานใน Sub-Block ของ Case 1 เลยทันทีเป็นแบบนี้ไปเรื่อย ๆ จน Case สุดท้ายที่เราใส่ Underscore เอาไว้ คือ ถ้ามันไม่เข้า Case ไหนเลย ก็ให้มันทำงาน Case นี้ไปแค่นั้น อันนี้มันเป็นแค่น้ำจิ้มเท่านั้น ลองไปดูเคสที่อร่อยกว่านี้ดีกว่า

prediction_result_container = [[2,1,0], [1,7], [6]]

for prediction_result in prediction_result_container :
    switch prediction_result :
        case [x] :
            print(f"Result contains single element is {x}")
        case [x,y] :
            print(f"Result contains 2 elements are {x} and {y}")
        case [x,10] :
            print(f"Result contains 2 element but one of them is not exists ({x})")
        case [x,y,z] :
            print(f"Result contains 3 elements are {x}, {y} and {z}")
        
Result contains 3 elements are 2, 1 and 0
Result contains 2 elements are 1 and 7
Result contains single element is 6

เราทำให้ Advance ขึ้น เรายกตัวอย่างว่า ตอนที่เราทำ Model Inference ออกมาแล้ว เราอาจจะ Filter ค่าความมั่นใจออกมาว่าถ้าเกิน 80% ให้ดึงออกมา ไม่สนว่ามีกี่ตัว ทำให้เราได้ ตัวแปร prediction_result_container เข้ามา จากนั้น เราก็อาจจะอยากให้โปรแกรมมันแสดงว่า มันได้กี่ Element ที่น่าจะใช่ และ มีอะไรบ้างออกมา

หรือใน Case ที่ 3 จากด้านบน เราจะเห็นว่า เรา Matching ด้วยกฏที่เพิ่มเข้าไปอีกว่าถ้ามันเป็น List ที่มี 2 Elements อยู่ด้านใน และตัวสุดท้ายเป็น 10 ให้มันทำใน Block ได้ ทำให้ใน Pattern Matching มันทำได้ตามชื่อจริง ๆ คือ เราสามารถบอกมันได้ด้วยว่า Pattern มันจะหน้าตาเป็นอย่างไร เช่นในตัวอย่างด้านบน เราเช็คเลยว่า มันเป็น List ที่มีกี่ Element และให้มัน Assign เก็บไว้ในตัวแปรเลย เพื่อให้เราสามารถเข้าถึงภายในแต่ละ Case ได้เลย

สรุป

Pattern Matching ไม่ได้ทำให้เราทำอะไรใหม่ได้มากหรอก แต่มันทำให้การเขียน Code มันสะอาดมากขึ้นจากเดิมที่เราใช้ If-Condition แล้วมันยาว ๆ ไม่สวยเท่าไหร่พอมี Pattern Matching มา มันก็ทำให้เราเขียนออกมาได้ดูดี อ่านง่ายกว่าเดิมเยอะ ถือว่าเป็น ของเล่นใหม่ เป็น Switch-Case on Steroid มาก ๆ ใน Python 3.10 ที่เรา Hype กับมันมาก ๆ ตัวนึงเลยทีเดียว

Read Next...

นายเองก็ดูเทพได้นะ ด้วย tmux น่ะ

นายเองก็ดูเทพได้นะ ด้วย tmux น่ะ

เมื่อหลายวันก่อน เราไปทำงานแล้วใช้ Terminal แบบปีศาจมาก ๆ จนเพื่อนถามว่า เราทำยังไงถึงสามารถสลับ Terminal Session ไปมาได้แบบบ้าคลั่งขนาดนั้น เบื้องหลังของผมน่ะเหรอกัปตัน ผมใช้ tmux ยังไงละ วันนี้เราจะมาแชร์ให้อ่านกันว่า มันเอามาใช้งานจริงได้อย่างไร เป็น Beginner Guide สำหรับคนที่อยากลองละกัน...

ปกป้อง Ubuntu ผ่าน Firewall แบบง่าย ๆ ด้วย UFW

ปกป้อง Ubuntu ผ่าน Firewall แบบง่าย ๆ ด้วย UFW

Firewall ถือว่าเป็นเครื่องมือในการป้องกันภัยขั้นพื้นฐานที่ปัจจุบันใคร ๆ ก็ติดตั้งใช้งานกันอยู่แล้ว แต่หากเรากำลังใช้ Ubuntu อยู่ จริง ๆ แล้วเขามี Firewall มาให้เราใช้งานได้เลยนะ มันชื่อว่า UFW วันนี้เราจะมาทำความรู้จัก และทดลองตั้ง Rule สำหรับการดักจับการเชื่อมต่อที่ไม่เกี่ยวข้องกันดีกว่า...

จัดการเรื่องแต่ละมื้อ แต่ละเดย์ด้วย Obsidian

จัดการเรื่องแต่ละมื้อ แต่ละเดย์ด้วย Obsidian

Obsidian เป็นโปรแกรมสำหรับการจด Note ที่เรียกว่า สารพัดประโยชน์มาก ๆ เราสามารถเอามาทำอะไรได้เยอะมาก ๆ หนึ่งในสิ่งที่เราเอามาทำคือ นำมาใช้เป็นระบบสำหรับการจัดการ Todo List ในแต่ละวันของเรา ทำอะไรบ้าง วันนี้เราจะมาเล่าให้อ่านกันว่า เราจัดการะบบอย่างไร...

Loop แท้ไม่มีอยู่จริง มีแต่ความจริงซึ่งคนโง่ยอมรับไม่ได้

Loop แท้ไม่มีอยู่จริง มีแต่ความจริงซึ่งคนโง่ยอมรับไม่ได้

อะ อะจ๊ะเอ๋ตัวเอง เป็นยังไงบ้างละ เมื่อหลายเดือนก่อน เราไปเล่าเรื่องกันขำ ๆ ว่า ๆ จริง ๆ แล้วพวก Loop ที่เราใช้เขียนโปรแกรมกันอยู่ มันไม่มีอยู่จริง สิ่งที่เราใช้งานกันมันพยายาม Abstract บางอย่างออกไป วันนี้เราจะมาถอดการทำงานของ Loop จริง ๆ กันว่า มันทำงานอย่างไรกันแน่ ผ่านภาษา Assembly...