Câu lệnh chuyển đổi Python

Giới thiệu

Câu lệnh switch là một công cụ mạnh mẽ và tiện lợi để kiểm soát luồng chương trình của bạn. Nó cho phép bạn tạo nhiều nhánh mã một cách nhanh chóng và dễ dàng, tùy thuộc vào giá trị của một biến hoặc biểu thức nhất định. Nó thường được sử dụng khi bạn cần thực thi logic khác nhau tùy thuộc vào giá trị của một biến nhất định, có thể có nhiều hơn 2 (nhưng là số hữu hạn) giá trị.

Trong bài viết này, chúng ta sẽ khám phá cách sử dụng câu lệnh switch trong Python và thảo luận về những ưu điểm của nó so với các cấu trúc điều khiển khác. Cho dù bạn là người mới làm quen với Python hay là một nhà phát triển có kinh nghiệm, câu lệnh switch có thể giúp bạn viết mã sạch hơn, hiệu quả hơn.

Trước v3.10

Trước khi câu lệnh switch Python có sẵn bằng ngôn ngữ này, các lập trình viên phải sử dụng các cấu trúc điều khiển khác để đạt được chức năng tương tự. Một cách tiếp cận phổ biến là sử dụng một loạt câu lệnh if-else, trong đó mỗi nhánh mã được liên kết với một giá trị khác nhau của biến đang được kiểm tra.

Ví dụ, hãy xem xét đoạn mã sau:

value = "foo"

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

Trong mã này, chúng tôi đang sử dụng câu lệnh if-else để xác định nhánh mã nào sẽ thực thi dựa trên giá trị của biến value. Nếu value bằng “foo”, nhánh mã đầu tiên sẽ được thực thi. Nếu như value bằng “bar”, nhánh mã thứ hai sẽ được thực thi. Ngược lại, mã trong else khối sẽ được thực thi.

Mặc dù phương pháp này hoạt động nhưng nó có thể nhanh chóng trở nên khó sử dụng khi số lượng giá trị có thể có của biến tăng lên. Ngoài ra, nó có thể làm cho mã khó đọc và khó hiểu.

Một cách tiếp cận khác có thể được sử dụng để tạo một câu lệnh giống switch trong Python là sử dụng từ điển. Theo cách tiếp cận này, các khóa của từ điển là các giá trị có thể có của biến đang được kiểm tra và các giá trị là các nhánh mã tương ứng.

Ví dụ, hãy xem xét đoạn mã sau:

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")()

Trong mã này, chúng tôi đã định nghĩa một từ điển có tên switch, với các khóa đại diện cho các giá trị có thể có của biến value. Đối với mỗi khóa, chúng tôi đã gán một hàm lambda làm giá trị, hàm này chứa nhánh mã tương ứng. Để thực thi nhánh mã thích hợp, chúng ta sử dụng get() phương thức của từ điển, cho phép chúng ta chỉ định một giá trị mặc định để sử dụng nếu khóa đã cho không tồn tại trong từ điển.

Mặc dù cách tiếp cận này linh hoạt và gọn gàng hơn so với sử dụng câu lệnh if-else nhưng nó vẫn có thể khó đọc và khó hiểu, đặc biệt nếu mã trong mỗi nhánh phức tạp. Ngoài ra, nó yêu cầu sử dụng các hàm lambda, điều này có thể gây nhầm lẫn cho một số lập trình viên. Chúng tôi khuyên bạn không nên sử dụng phương pháp này trừ khi vì lý do nào đó bạn không thể sử dụng các phương pháp khác trong bài viết này.

Với sự ra đời của câu lệnh chuyển đổi Python trong Python v3.10, giờ đây các lập trình viên có một cách thuận tiện và trực quan hơn để kiểm soát luồng chương trình của họ dựa trên giá trị của một biến hoặc biểu thức nhất định. Trong phần tiếp theo, chúng ta sẽ khám phá cách sử dụng câu lệnh switch thực tế trong Python.

Sản phẩm match/case Tuyên bố (sau v3.10)

Sau Python v3.10, câu lệnh switch được xử lý bằng cách sử dụng match từ khóa. Từ khóa này được sử dụng để tạo biểu thức khớp mẫu, cho phép bạn kiểm tra giá trị của một biến hoặc biểu thức nhất định dựa trên một loạt mẫu. Nếu tìm thấy kết quả khớp, nhánh mã tương ứng sẽ được thực thi.

Ví dụ, hãy xem xét đoạn mã sau:

value = "foo"

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

Xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, các tiêu chuẩn được ngành công nghiệp chấp nhận và bảng lừa đảo đi kèm. Dừng lệnh Googling Git và thực sự học nó!

Trong mã này, chúng tôi đang sử dụng match từ khóa để tạo biểu thức khớp mẫu, kiểm tra giá trị của biến value chống lại một loạt các mô hình. Nếu như value bằng “foo”, nhánh mã đầu tiên sẽ được thực thi. Nếu như value bằng “bar”, nhánh mã thứ hai sẽ được thực thi. Ngược lại, mã trong khối else sẽ được thực thi.

Rơi qua

Một trong những điểm khác biệt chính giữa câu lệnh switch trong Python và câu lệnh switch truyền thống trong các ngôn ngữ khác là match tuyên bố không hỗ trợ thông qua. Nói cách khác, khi tìm thấy kết quả khớp và nhánh mã tương ứng được thực thi, match biểu thức kết thúc và không có mã nào khác trong match tuyên bố được thực thi. Trong các ngôn ngữ khác, điều này thường đạt được bằng cách sử dụng break từ khóa không cần thiết hoặc không được hỗ trợ ở đây.

Nếu bạn muốn đạt được hành vi tương tự như dự phòng trong câu lệnh chuyển đổi truyền thống, bạn có thể sử dụng | toán tử để khớp với nhiều trường hợp. Toán tử này cho phép bạn chỉ định nhiều mẫu trong một casevà bất kỳ mẫu nào cũng có thể được khớp để kích hoạt việc thực thi nhánh đó.

Ví dụ, hãy xem xét đoạn mã sau:

value = "y"

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

Ở đây, nếu giá trị của value tương đương với “có” or “y”, nhánh mã đầu tiên sẽ được thực thi. Điều này tương đương với hành vi thất bại trong câu lệnh switch truyền thống.

Mặc định

Như bạn có thể đã nhận thấy từ các ví dụ trên, trường hợp “mặc định” được xử lý bằng dấu gạch dưới (_). Đây được coi là “ký tự đại diện” và khớp với tất cả các giá trị. Nếu một trong các trường hợp trước khớp với giá trị thì nhánh mã mặc định sẽ bị bỏ qua và không được thực thi.

Kết luận

Như bạn có thể thấy, câu lệnh Python match (hay còn gọi là “switch”) cung cấp một cách mạnh mẽ và thuận tiện để kiểm soát luồng chương trình của bạn. Cho dù bạn là người mới làm quen với Python hay là một nhà phát triển có kinh nghiệm, câu lệnh switch có thể giúp bạn viết mã sạch hơn, hiệu quả hơn.

Dấu thời gian:

Thêm từ xếp chồng lên nhau