คำสั่ง Python Switch

บทนำ

คำสั่ง switch เป็นเครื่องมือที่ทรงพลังและสะดวกสบายในการควบคุมการไหลของโปรแกรมของคุณ ช่วยให้คุณสร้างโค้ดหลายสาขาได้อย่างรวดเร็วและง่ายดาย ขึ้นอยู่กับค่าของตัวแปรหรือนิพจน์ที่กำหนด โดยทั่วไปจะใช้เมื่อคุณต้องการดำเนินการตรรกะที่แตกต่างกัน ขึ้นอยู่กับค่าของตัวแปรที่กำหนด ซึ่งสามารถมีค่าได้มากกว่า 2 (แต่มีจำนวนจำกัด)

ในบทความนี้ เราจะสำรวจวิธีใช้คำสั่ง switch ใน Python และอภิปรายการข้อดีของมันเหนือโครงสร้างการควบคุมอื่นๆ ไม่ว่าคุณจะเพิ่งเริ่มใช้ Python หรือเป็นนักพัฒนาที่มีประสบการณ์ คำสั่ง switch สามารถช่วยให้คุณเขียนโค้ดที่สะอาดตาและมีประสิทธิภาพมากขึ้นได้

ก่อนเวอร์ชัน 3.10

ก่อนที่คำสั่งสวิตช์ Python จะพร้อมใช้งานในภาษานั้น โปรแกรมเมอร์ต้องใช้โครงสร้างการควบคุมอื่นเพื่อให้บรรลุฟังก์ชันการทำงานแบบเดียวกัน แนวทางหนึ่งที่ใช้กันทั่วไปคือการใช้ชุดคำสั่ง if-else โดยโค้ดแต่ละสาขาเชื่อมโยงกับค่าที่แตกต่างกันของตัวแปรที่กำลังทดสอบ

ตัวอย่างเช่น พิจารณารหัสต่อไปนี้:

value = "foo"

if value == "foo":
    print("foo was selected")
elif value == "bar":
    print("bar was selected")
else:
    print("Nothing valid was selected")

ในโค้ดนี้ เราใช้คำสั่ง if-else เพื่อกำหนดสาขาของโค้ดที่จะดำเนินการตามค่าของตัวแปร value. ถ้า value เท่ากับ "foo" โค้ดสาขาแรกจะถูกดำเนินการ ถ้า value เท่ากับ "bar" โค้ดสาขาที่สองจะถูกดำเนินการ มิฉะนั้นรหัสใน else บล็อคจะถูกดำเนินการ

แม้ว่าวิธีการนี้จะได้ผล แต่ก็อาจกลายเป็นเรื่องยุ่งยากได้อย่างรวดเร็วเมื่อจำนวนค่าที่เป็นไปได้สำหรับตัวแปรเพิ่มขึ้น นอกจากนี้ยังอาจทำให้โค้ดอ่านและทำความเข้าใจได้ยากอีกด้วย

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

ตัวอย่างเช่น พิจารณารหัสต่อไปนี้:

value = "foo"

switch = {
    "foo": lambda: print("foo was selected"),
    "bar": lambda: print("bar was selected"),
    "default": lambda: print("Nothing valid was selected"),
}

switch.get(value, "default")()

ในโค้ดนี้เราได้กำหนดพจนานุกรมชื่อ switchโดยมีคีย์ที่แสดงถึงค่าที่เป็นไปได้ของตัวแปร value- สำหรับแต่ละคีย์ เราได้กำหนดฟังก์ชัน lambda เป็นค่า ซึ่งประกอบด้วยสาขาของโค้ดที่สอดคล้องกัน ในการรันโค้ดสาขาที่เหมาะสม เราใช้ get() วิธีการของพจนานุกรมซึ่งช่วยให้เราสามารถระบุค่าเริ่มต้นเพื่อใช้หากไม่มีคีย์ที่กำหนดในพจนานุกรม

แม้ว่าวิธีการนี้จะมีความยืดหยุ่นและกะทัดรัดมากกว่าการใช้คำสั่ง if-else แต่ก็ยังอาจเป็นเรื่องยากที่จะอ่านและทำความเข้าใจ โดยเฉพาะอย่างยิ่งหากโค้ดในแต่ละสาขามีความซับซ้อน นอกจากนี้ยังต้องใช้ฟังก์ชัน lambda ซึ่งอาจทำให้โปรแกรมเมอร์บางคนสับสนได้ เราไม่แนะนำให้ใช้วิธีนี้ เว้นแต่คุณจะใช้วิธีอื่นในบทความนี้ไม่ได้ด้วยเหตุผลบางประการ

ด้วยการเปิดตัวคำสั่งสวิตช์ Python ใน Python เวอร์ชัน 3.10 โปรแกรมเมอร์จะมีวิธีที่สะดวกและเป็นธรรมชาติมากขึ้นในการควบคุมโฟลว์ของโปรแกรมตามค่าของตัวแปรหรือนิพจน์ที่กำหนด ในส่วนถัดไป เราจะมาดูวิธีใช้คำสั่ง switch จริงใน Python

พื้นที่ match/case คำชี้แจง (หลังเวอร์ชัน 3.10)

หลังจาก Python v3.10 คำสั่ง switch จะถูกจัดการโดยใช้ match คำสำคัญ. คีย์เวิร์ดนี้ใช้เพื่อสร้างนิพจน์การจับคู่รูปแบบ ซึ่งช่วยให้คุณสามารถทดสอบค่าของตัวแปรหรือนิพจน์ที่กำหนดกับชุดรูปแบบต่างๆ หากพบว่าตรงกัน สาขาของโค้ดที่เกี่ยวข้องจะถูกดำเนินการ

ตัวอย่างเช่น พิจารณารหัสต่อไปนี้:

value = "foo"

match value:
    case "foo":
        print("foo was selected")
    case "bar":
        print("bar was selected")
    case _:
        print("Nothing valid was selected")

ดูคู่มือเชิงปฏิบัติสำหรับการเรียนรู้ Git ที่มีแนวทางปฏิบัติที่ดีที่สุด มาตรฐานที่ยอมรับในอุตสาหกรรม และเอกสารสรุปรวม หยุดคำสั่ง Googling Git และจริงๆ แล้ว เรียน มัน!

ในโค้ดนี้เราใช้ match คีย์เวิร์ดเพื่อสร้างนิพจน์การจับคู่รูปแบบ ซึ่งจะทดสอบค่าของตัวแปร value เทียบกับลวดลายต่างๆ ถ้า value เท่ากับ "foo" โค้ดสาขาแรกจะถูกดำเนินการ ถ้า value เท่ากับ "bar" โค้ดสาขาที่สองจะถูกดำเนินการ มิฉะนั้น โค้ดในบล็อก else จะถูกดำเนินการ

เจ๊ง

ความแตกต่างที่สำคัญประการหนึ่งระหว่างคำสั่ง switch ใน Python และคำสั่ง switch แบบดั้งเดิมในภาษาอื่นก็คือ Python match คำสั่งไม่สนับสนุนการล้มผ่าน กล่าวอีกนัยหนึ่ง เมื่อพบรายการที่ตรงกันและดำเนินการสาขาของโค้ดที่เกี่ยวข้องแล้ว match นิพจน์สิ้นสุดลงและไม่มีโค้ดอื่นใน match คำสั่งถูกดำเนินการ ในภาษาอื่นๆ โดยทั่วไปสามารถทำได้โดยใช้ break คำหลักซึ่งไม่จำเป็นหรือได้รับการสนับสนุนที่นี่

หากคุณต้องการบรรลุพฤติกรรมแบบเดียวกับ Fall-through ในคำสั่ง switch แบบเดิม คุณสามารถใช้ | โอเปอเรเตอร์เพื่อจับคู่หลายกรณี โอเปอเรเตอร์นี้ช่วยให้คุณระบุหลายรูปแบบได้ในอันเดียว caseและสามารถจับคู่รูปแบบใดๆ เพื่อทริกเกอร์การดำเนินการของสาขานั้นได้

ตัวอย่างเช่น พิจารณารหัสต่อไปนี้:

value = "y"

match value:
    case "yes" | "y":
        print("The user confirmed")
    case _:
        print("The user denied")

ในที่นี้ถ้าค่าของ value เท่ากับ “ใช่” or “y” โค้ดสาขาแรกจะถูกดำเนินการ ซึ่งเทียบเท่ากับพฤติกรรมการตกผ่านในคำสั่งสวิตช์แบบดั้งเดิม

เริ่มต้น

ตามที่คุณอาจสังเกตเห็นจากตัวอย่างข้างต้น กรณี "เริ่มต้น" จะได้รับการจัดการโดยใช้เครื่องหมายขีดล่าง (_- ซึ่งถือเป็น "สัญลักษณ์แทน" และตรงกับค่าทั้งหมด หากกรณีใดกรณีหนึ่งก่อนหน้านี้ตรงกับค่า สาขารหัสเริ่มต้นจะถูกข้ามและไม่ถูกดำเนินการ

สรุป

อย่างที่คุณเห็น คำสั่ง Python Match (หรือที่เรียกว่า "สวิตช์") นำเสนอวิธีที่มีประสิทธิภาพและสะดวกในการควบคุมโฟลว์ของโปรแกรมของคุณ ไม่ว่าคุณจะเพิ่งเริ่มใช้ Python หรือเป็นนักพัฒนาที่มีประสบการณ์ คำสั่ง switch สามารถช่วยให้คุณเขียนโค้ดที่สะอาดตาและมีประสิทธิภาพมากขึ้นได้

ประทับเวลา:

เพิ่มเติมจาก สแต็ค