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...

ฮาวทูย้าย Synology Add-on Package ไปอีก Volume

ฮาวทูย้าย Synology Add-on Package ไปอีก Volume

เรื่องราวเกิดจากการที่เราต้องย้าย Add-on Package ใน DSM และคิดว่าหลาย ๆ คนน่าจะต้องประสบเรื่องราวคล้าย ๆ กัน วันนี้เราจะมาเล่าวิธีการว่า เราทำยังไง เจอปัญหาอะไร และ แก้ปัญหาอย่างไรให้ได้อ่านกัน...

จัดการ Docker Container ง่าย ๆ ด้วย Portainer

จัดการ Docker Container ง่าย ๆ ด้วย Portainer

การใช้ Docker CLI ในการจัดการ Container เป็นท่าที่เราใช้งานกันทั่วไป มันมีความยุ่งยาก และผิดพลาดได้ง่ายยังไม่นับว่ามี Instance หลายตัว ทำให้เราต้องค่อย ๆ SSH เข้าไปทำทีละตัว มันจะดีกว่ามั้ย หากเรามี Centralised Container Managment ที่มี Web GUI ให้เราด้วย วันนี้เราจะพาไปทำความรู้จักกับ Portainer กัน...

Host Website จากบ้านด้วย Cloudflare Tunnel ใน 10 นาที

Host Website จากบ้านด้วย Cloudflare Tunnel ใน 10 นาที

ปกติหากเราต้องการจะเปิดเว็บสักเว็บ เราจำเป็นต้องมี Web Server ตั้งอยู่ที่ไหนสักที่หนึ่ง ต้องใช้ค่าใช้จ่าย พร้อมกับต้องจัดการเรื่องความปลอดภัยอีก วันนี้เราจะมาแนะนำวิธีการที่ง่ายแสนง่าย ปลอดภัย และฟรี กับ Cloudflare Tunnel ให้อ่านกัน...

จัดการข้อมูลบน Pandas ยังไงให้เร็ว 1000x ด้วย Vectorisation

จัดการข้อมูลบน Pandas ยังไงให้เร็ว 1000x ด้วย Vectorisation

เวลาเราทำงานกับข้อมูลอย่าง Pandas DataFrame หนึ่งในงานที่เราเขียนลงไปให้มันทำคือ การ Apply Function เข้าไป ถ้าข้อมูลมีขนาดเล็ก มันไม่มีปัญหาเท่าไหร่ แต่ถ้าข้อมูลของเราใหญ่ มันอีกเรื่องเลย ถ้าเราจะเขียนให้เร็วที่สุด เราจะทำได้โดยวิธีใดบ้าง วันนี้เรามาดูกัน...