Chuyển đến nội dung chính

Câu lệnh Switch Case trong Python: Hướng dẫn cho người mới bắt đầu

Khám phá match-case của Python: hướng dẫn về cú pháp, ứng dụng trong khoa học dữ liệu, ML và so sánh với switch-case truyền thống.
Đã cập nhật 5 thg 6, 2026  · 5 phút đọc

Khám phá câu lệnh match-case của Python, được giới thiệu trong Python 3.10, và tìm hiểu cách so khớp mẫu theo cấu trúc mang lại sự tinh gọn và mạnh mẽ mới cho lập trình Python. Chúng ta sẽ đi sâu vào cú pháp, các ứng dụng trong khoa học dữ liệu và máy học, và cả cách nó so sánh với switch-case truyền thống ở các ngôn ngữ khác. Nếu bạn mới học Python, hãy xem Python Cheat Sheet cho người mới bắt đầu của chúng tôi. 

Tìm hiểu về câu lệnh Switch Case truyền thống

Trước Python 3.10, các lập trình viên Python phải dùng nhiều câu lệnh if-elif-else hoặc từ điển để mô phỏng chức năng switch case. Dưới đây là ví dụ cơ bản dùng if-elif-else:

day = "Saturday"

if day == "Saturday" or day == "Sunday":
    print(f"{day} is a weekend.")
elif day in ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]:
    print(f"{day} is a weekday.")
else:
    print("That's not a valid day of the week.")

# Saturday is a weekend.

Giới thiệu Match và Case trong Python 3.10

Với sự xuất hiện của match-case, Python hiện hỗ trợ tính năng dựa trên so khớp mẫu theo cấu trúc, cho phép bạn viết logic điều kiện gọn gàng và mạnh mẽ hơn.

So khớp mẫu theo cấu trúc là gì?

So khớp mẫu theo cấu trúc, được giới thiệu trong PEP 634, là cách so khớp và phá cấu trúc dữ liệu dựa trên hình dạng và nội dung của chúng. Nó linh hoạt hơn so khớp giá trị truyền thống, giúp lập trình viên làm việc với dãy, ánh xạ và thậm chí cả các thể hiện lớp tùy chỉnh.

Cú pháp cơ bản của Match-Case

Dưới đây là ví dụ đơn giản về match-case trong thực tế. Hãy phân loại các ngày trong tuần thành cuối tuần hoặc ngày thường:

day = "Monday"

# Match the day to predefined patterns
match day:
    case "Saturday" | "Sunday":
        print(f"{day} is a weekend.")  # Match weekends
    case "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday":
        print(f"{day} is a weekday.")  # Match weekdays
    case _:
        print("That's not a valid day of the week.")  # Default case

# Monday is a weekday.

Các khái niệm chính trong ví dụ:

  1. So khớp mẫu với case:

    • case "Saturday" | "Sunday": Khớp với bất kỳ mẫu nào được liệt kê. Ký hiệu | hoạt động như toán tử OR.

    • case _: Trường hợp bao quát (mặc định) để xử lý đầu vào không hợp lệ.

  2. Không cần break: Khác với switch-case truyền thống, Python thoát khỏi khối match sau lần khớp đầu tiên thành công.

So sánh match-case với if-elif-else

Trong bảng dưới đây, bạn có thể thấy cách hai kỹ thuật này so sánh với nhau: 

Tính năng if-elif-else match-case
Được giới thiệu trong Đã có từ các phiên bản Python đầu Giới thiệu trong Python 3.10
Cú pháp Dùng các từ khóa if, elif và else Dùng các từ khóa match và case
Tính dễ đọc Có thể dài dòng khi có nhiều điều kiện Ngắn gọn và dễ đọc hơn với các mẫu phức tạp
Trường hợp mặc định Dùng else cho kịch bản mặc định Dùng _ như ký tự đại diện cho trường hợp mặc định
So khớp mẫu Giới hạn ở kiểm tra điều kiện đơn giản Hỗ trợ so khớp mẫu phức tạp (ví dụ: dãy)
Hiệu năng Nhìn chung hiệu quả với điều kiện đơn giản Có thể hiệu quả hơn với các mẫu phức tạp
Phạm vi Mỗi khối yêu cầu phạm vi rõ ràng bằng thụt dòng Phạm vi được xác định tự nhiên trong các khối case
Tình huống sử dụng Phù hợp cho các tác vụ ra quyết định đơn giản Lý tưởng để phá cấu trúc các cấu trúc dữ liệu phức tạp
Tính linh hoạt Giới hạn ở so sánh vô hướng Có thể khớp các kiểu dữ liệu và cấu trúc phức tạp
Tự động thoát Trong một số ngôn ngữ cần break được ghi rõ Tự động thoát sau khi một case được khớp

Các tình huống nâng cao của Match và Case trong Python

Ứng dụng trong khoa học dữ liệu

Câu lệnh match-case của Python rất hữu ích trong các tác vụ tiền xử lý dữ liệu trong khoa học dữ liệu. Tiền xử lý thường liên quan đến việc phân loại dữ liệu vào các nhóm khác nhau dựa trên tiêu chí cụ thể.

Ví dụ, trong một tập dữ liệu về động vật, bạn có thể muốn phân loại chúng theo lớp như thú, chim, bò sát, v.v. Dưới đây là ví dụ đơn giản:

animal = "Eagle"
match animal:
    case "Eagle" | "Parrot":
        print("Bird")
    case "Lion" | "Tiger":
        print("Mammal")
    case "Python" | "Crocodile":
        print("Reptile")
    case _:
        print("Unknown Class")

# Bird

Cách tiếp cận này đơn giản hóa logic if-else phức tạp và giúp mã dễ đọc, dễ bảo trì hơn, đặc biệt khi xử lý tập dữ liệu lớn với nhiều danh mục.

Phát triển web

Trong các framework web như Django hoặc Flask, bạn có thể dùng match-case để định tuyến yêu cầu HTTP hoặc xử lý các mã lỗi cụ thể. Tìm hiểu thêm về Python cho Lập trình viên với khóa học trực tuyến của chúng tôi. 

Ví dụ: Định tuyến phương thức HTTP

# Example: Handling HTTP methods in a Flask-like application
method = "POST"

match method:
    case "GET":
        print("Fetching resource...")
    case "POST":
        print("Creating resource...")
    case "PUT":
        print("Updating resource...")
    case "DELETE":
        print("Deleting resource...")
    case _:
        print("Unsupported HTTP method.")

# Creating resource...

Giải thích:

  • Biến method biểu thị loại yêu cầu HTTP.
  • Mỗi case tương ứng với một phương thức HTTP có thể có, giúp đơn giản hóa những gì lẽ ra là nhiều câu lệnh if-elif.

Xử lý API

Khi xử lý phản hồi API, match-case có thể được dùng để xử lý các mã trạng thái khác nhau hoặc phân loại phản hồi JSON.

Ví dụ: Xử lý mã trạng thái

# Example: API response status code handling
status_code = 200

match status_code:
    case 200:
        print("Request succeeded.")
    case 404:
        print("Resource not found.")
    case 500:
        print("Server error. Please try again later.")
    case _:
        print("Unknown status code.")

# Request succeeded.

Cách tiếp cận này giúp việc diễn giải và phản hồi kết quả API trở nên dễ dàng hơn.

So khớp mẫu đơn giản so với phức tạp

match-case của Python không chỉ giới hạn ở so khớp giá trị hằng; nó có thể xử lý các mẫu phức tạp hơn. Phân biệt như sau:

So khớp hằng số đơn giản

Các phép khớp đơn giản như chuỗi hoặc số nguyên rất phù hợp để có logic sạch, dễ đọc, như trong các ví dụ ở trên.

So khớp mẫu phức tạp

Khi làm việc với dữ liệu có cấu trúc (ví dụ: từ điển, dãy), match-case có thể trích xuất và thao tác dữ liệu hiệu quả.

Ví dụ: So khớp cấu trúc dữ liệu

# Example: Categorizing configurations
config = {"type": "database", "name": "PostgreSQL", "version": 13}

match config:
    case {"type": "database", "name": name, "version": version}:
        print(f"Database: {name} (Version {version})")
    case {"type": "cache", "name": name}:
        print(f"Cache system: {name}")
    case _:
        print("Unknown configuration.")

# Database: PostgreSQL (Version 13)

Giải thích:

  • case đầu tiên trích xuất nameversion từ từ điển, giúp làm việc với dữ liệu có cấu trúc dễ dàng hơn.

  • Điều này thể hiện sức mạnh thực sự của so khớp mẫu theo cấu trúc trong Python, vượt xa những gì switch-case truyền thống có thể làm.

Dưới đây là phần đã rút gọn chỉ với các bổ sung liên quan:

Vượt ra ngoài Switch-Case cơ bản

Vượt qua việc so khớp giá trị cơ bản, match-case của Python còn có một số tính năng khiến nó khác biệt so với switch-case truyền thống ở các ngôn ngữ khác.

Mệnh đề bảo vệ (guard)

Guard là một điều kiện if gắn với một case mà cũng phải đúng để case đó khớp. Điều này cho phép bạn kết hợp so khớp mẫu với logic bổ sung — điều mà các câu lệnh switch truyền thống không làm được:

match point:
    case (x, y) if x == y:
        print(f"Point is on the diagonal at {x}")
    case (x, y) if x > 0 and y > 0:
        print(f"Point {point} is in the first quadrant")
    case (x, y):
        print(f"Point {point} is somewhere else")

# Point (3, 7) is in the first quadrant
 

Guards hữu ích khi chỉ riêng mẫu không đủ cụ thể để phân biệt giữa các trường hợp.

Vượt ra ngoài switch-case: các mẫu phá cấu trúc

Trong khi các ví dụ trên tập trung vào cách dùng theo kiểu switch-case, cũng đáng biết rằng match-case của Python còn có thể phá cấu trúc các dãy, từ điển và thể hiện lớp — đồng thời bắt các giá trị bên trong như một phần của phép khớp. Điều này vượt xa những gì switch ở các ngôn ngữ khác cung cấp và là một trong những lý do chính mà so khớp mẫu theo cấu trúc được thêm vào Python.

Ví dụ, so khớp một thể hiện lớp:

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

point = Point(0, 5)

match point:
    case Point(x=0, y=0):
        print("Origin")
    case Point(x=0, y=y):
        print(f"On the Y-axis at {y}")
    case Point():
        print("Somewhere else on the plane")

# On the Y-axis at 5

Nếu bạn muốn khám phá sâu hơn các mẫu nâng cao này, hãy xem PEP 636, hướng dẫn chính thức về so khớp mẫu theo cấu trúc.

Những lỗi thường gặp và thực hành tốt với Python Switch Case

Mẹo gỡ lỗi

Một lỗi phổ biến khi dùng match-case trong Python là quên thêm dấu gạch dưới (_) cho trường hợp mặc định, tương tự như 'else' trong if-else truyền thống. Điều này có thể dẫn đến hành vi ngoài dự kiến nếu không có trường hợp cụ thể nào khớp. Luôn bao gồm trường hợp mặc định để xử lý các giá trị bất ngờ hoặc khác biệt.

Cân nhắc về hiệu năng

Mặc dù câu lệnh match-case là một công cụ mạnh, tác động của nó đến hiệu năng mã Python, đặc biệt trong các ứng dụng quy mô lớn, cần được cân nhắc. Trong các tình huống có nhiều case hoặc so khớp mẫu phức tạp, hiệu năng có thể bị ảnh hưởng. Việc đo đạc và kiểm thử hiệu năng mã trong các kịch bản thực tế là rất quan trọng để hiểu và giảm thiểu các vấn đề tiềm ẩn về hiệu năng.

Python Match-Case so với Switch-Case truyền thống

Phân tích so sánh

Match-case của Python khác biệt đáng kể so với switch-case truyền thống trong các ngôn ngữ như Java hoặc C++. Ví dụ trong Java, câu lệnh switch chỉ giới hạn ở việc khớp các giá trị vô hướng (như số nguyên và kiểu enum), trong khi match-case của Python cung cấp khả năng so khớp mẫu linh hoạt hơn nhiều, cho phép khớp các kiểu dữ liệu phức tạp như dãy và thể hiện lớp. Điều này khiến cách triển khai của Python mạnh mẽ hơn nhưng cũng đòi hỏi hiểu biết sâu hơn về các khái niệm so khớp mẫu.

Hướng dẫn chuyển đổi

Đối với các lập trình viên quen với switch-case truyền thống trong các ngôn ngữ như C++ hoặc Java, chuyển sang match-case của Python đòi hỏi thay đổi tư duy từ so khớp giá trị đơn giản sang so khớp mẫu.

Điều quan trọng là hiểu rằng match-case của Python không chỉ là một switch-case; đó là công cụ linh hoạt để phá cấu trúc kiểu dữ liệu và trích xuất thông tin từ các cấu trúc phức tạp. Luyện tập với các kiểu dữ liệu và mẫu khác nhau là chìa khóa để thành thạo cách dùng.

Kết luận

Các câu lệnh matchcase của Python, được giới thiệu từ phiên bản 3.10, đã trở thành một tính năng quen thuộc của Python hiện đại. Kể từ đó, so khớp mẫu theo cấu trúc đã trưởng thành thành một công cụ đáng tin cậy có mặt trong mọi phiên bản ngôn ngữ còn được hỗ trợ tích cực — bao gồm bản phát hành ổn định mới nhất, Python 3.14.4 (tháng 4/2026), cũng như 3.13 và 3.12.

Bạn có thể đọc thêm về Hàm trong Python trong hướng dẫn đầy đủ của chúng tôi và khám phá chủ đề này cùng các khái niệm khác trong khóa học Python trung cấp.


Matt Crabtree's photo
Author
Matt Crabtree
LinkedIn

Biên tập viên cấp cao trong lĩnh vực AI và công nghệ giáo dục. Cam kết khám phá các xu hướng dữ liệu và AI.  

Câu hỏi thường gặp về Python Switch Case

Điều gì xảy ra nếu hai case khớp cùng một đầu vào trong một câu lệnh match-case?

Python đánh giá các case theo thứ tự xuất hiện. Case khớp đầu tiên sẽ được thực thi và khối match thoát ngay lập tức.

Có thể dùng match-case với các lớp hoặc đối tượng tùy chỉnh không?

Có, match-case có thể hoạt động với các lớp tùy chỉnh. Bạn có thể định nghĩa các mẫu để khớp thuộc tính hoặc thậm chí dùng guard để áp dụng logic bổ sung.

match-case có nhanh hơn if-elif-else không?

Khác biệt về hiệu năng phụ thuộc vào độ phức tạp của điều kiện. Với các kiểm tra giá trị đơn giản, cả hai hoạt động tương tự nhau. Tuy nhiên, match-case có thể hiệu quả và dễ đọc hơn khi so khớp mẫu phức tạp.

Guard trong câu lệnh match-case là gì?

Guard là một điều kiện được chỉ định sau case để tinh chỉnh khi nào một case nên khớp. Ví dụ:

match value:
    case x if x > 10:
        print("Value is greater than 10.")

Bạn có thể dùng match-case với các phiên bản Python trước 3.10 không?

Không, match-case chỉ có trong Python 3.10 trở lên. Với các phiên bản trước, bạn có thể dùng if-elif-else hoặc ánh xạ bằng từ điển để đạt chức năng tương tự.

Chủ đề

Học Python ngay hôm nay

Tracks

Lập trình Python

19 giờ
Nâng cao kỹ năng lập trình của quý vị. Học cách tối ưu hóa mã nguồn, viết hàm và kiểm thử, cũng như áp dụng các kỹ thuật công nghệ phần mềm tốt nhất.
Xem chi tiếtRight Arrow
Bắt đầu khóa học
Xem thêmRight Arrow