Hướng dẫn python match case two variables - trường hợp khớp python hai biến

Tôi đang cố gắng sử dụng nhiều trường hợp trong một chức năng tương tự như hình dưới đây để tôi có thể thực thi nhiều trường hợp bằng cách sử dụng các trường hợp phù hợp trong Python 3.10

def sayHi(name):
    match name:
        case ['Egide', 'Eric']:
            return f"Hi Mr {name}"
        case 'Egidia':
            return f"Hi Ms {name}"
print(sayHi('Egide'))

Điều này chỉ trả về

CONSTANTS = ['a','b', ...] # a (possibly large) iterable

def demo(item):
    match item:
        case item if item in CONSTANTS:
            return f"{item} matched"
        case other:
            return f"No match for {item}"
5 thay vì tin nhắn, ngay cả khi tôi xóa dấu ngoặc vuông.

Hỏi ngày 20 tháng 10 năm 2021 lúc 8:44Oct 20, 2021 at 8:44

Hướng dẫn python match case two variables - trường hợp khớp python hai biến

1

Bạn có thể sử dụng

CONSTANTS = ['a','b', ...] # a (possibly large) iterable

def demo(item):
    match item:
        case item if item in CONSTANTS:
            return f"{item} matched"
        case other:
            return f"No match for {item}"
6 (hoặc) để thay thế
CONSTANTS = ['a','b', ...] # a (possibly large) iterable

def demo(item):
    match item:
        case item if item in CONSTANTS:
            return f"{item} matched"
        case other:
            return f"No match for {item}"
7 bằng
CONSTANTS = ['a','b', ...] # a (possibly large) iterable

def demo(item):
    match item:
        case item if item in CONSTANTS:
            return f"{item} matched"
        case other:
            return f"No match for {item}"
8, nhưng bạn cũng có thể khớp với các phần tử thuộc về các đường lặp hoặc container có bảo vệ, như sau:

CONSTANTS = ['a','b', ...] # a (possibly large) iterable

def demo(item):
    match item:
        case item if item in CONSTANTS:
            return f"{item} matched"
        case other:
            return f"No match for {item}"

Jacktose

6697 Huy hiệu bạc21 Huy hiệu Đồng7 silver badges21 bronze badges

Đã trả lời ngày 24 tháng 10 lúc 22:04Oct 24 at 22:04

Hướng dẫn python match case two variables - trường hợp khớp python hai biến

BlakeblakeBlake

8148 Huy hiệu bạc22 Huy hiệu đồng8 silver badges22 bronze badges

2

Trong hướng dẫn này, bạn sẽ học cách sử dụng Python để tạo câu lệnh trong trường hợp chuyển đổi. Trước Python phiên bản 3.10, Python không có tuyên bố trường hợp chuyển đổi chính thức. Để thực hiện điều này, bạn đã có một số tùy chọn khác nhau, chẳng hạn như các câu lệnh và từ điển

CONSTANTS = ['a','b', ...] # a (possibly large) iterable

def demo(item):
    match item:
        case item if item in CONSTANTS:
            return f"{item} matched"
        case other:
            return f"No match for {item}"
9.you’ll learn how to use Python to create a switch-case statement. Prior to Python version 3.10, Python did not have an official switch-case statement. In order to accomplish this, you had a number of different options, such as
CONSTANTS = ['a','b', ...] # a (possibly large) iterable

def demo(item):
    match item:
        case item if item in CONSTANTS:
            return f"{item} matched"
        case other:
            return f"No match for {item}"
9 statements and dictionaries.

Đến cuối hướng dẫn này, bạn sẽ học được:

  • Cách sử dụng các câu lệnh trường hợp chuyển đổi Python trong Python 3.10+
  • Một số trường hợp sử dụng cho các câu lệnh case python là gì
  • Cách mô phỏng các câu lệnh trường hợp chuyển đổi trong các phiên bản Python cũ hơn, sử dụng từ điển, câu lệnh if-else và các lớp

  • Các câu lệnh trong trường hợp chuyển đổi là gì?
  • Làm thế nào để các câu lệnh trong trường hợp chuyển đổi hoạt động trong Python?
  • Cách tạo các câu lệnh trong trường hợp chuyển đổi trong Python với if-else
  • Cách tạo các câu lệnh trong trường hợp chuyển đổi trong Python với từ điển
  • Sự kết luận
  • Tài nguyên bổ sung

Các câu lệnh trong trường hợp chuyển đổi là gì?

Làm thế nào để các câu lệnh trong trường hợp chuyển đổi hoạt động trong Python?

Cách tạo các câu lệnh trong trường hợp chuyển đổi trong Python với if-else

Câu lệnh

# Building a simple match-case statement in Python
response_code = 400

match response_code:
    case 200:
        print("Everything's peachy!")
    case 300:
        print("You're going somewhere else!")
    case 400:
        print("Uh oh. Are you lost?")
    case 500:
        print("Yikes. Something went wrong!")

# Returns:
# Uh oh. Are you lost?
0 hoặc
# Building a simple match-case statement in Python
response_code = 400

match response_code:
    case 200:
        print("Everything's peachy!")
    case 300:
        print("You're going somewhere else!")
    case 400:
        print("Uh oh. Are you lost?")
    case 500:
        print("Yikes. Something went wrong!")

# Returns:
# Uh oh. Are you lost?
1 là một tuyên bố đánh giá biểu thức đối với một trường hợp và sau đó thực thi một số mã. Nó có một phương pháp theo đó các ngôn ngữ lập trình có thể kiểm soát luồng của chương trình, dựa trên một điều kiện (hoặc điều kiện) được đáp ứng.Structural Pattern Matching in Python. This represents the
# Building a simple match-case statement in Python
response_code = 400

match response_code:
    case 200:
        print("Everything's peachy!")
    case 300:
        print("You're going somewhere else!")
    case 400:
        print("Uh oh. Are you lost?")
    case 500:
        print("Yikes. Something went wrong!")

# Returns:
# Uh oh. Are you lost?
2 statements finally coming to Python in an official manner! What’s more, is that Python actually extends beyond a simple
# Building a simple match-case statement in Python
response_code = 400

match response_code:
    case 200:
        print("Everything's peachy!")
    case 300:
        print("You're going somewhere else!")
    case 400:
        print("Uh oh. Are you lost?")
    case 500:
        print("Yikes. Something went wrong!")

# Returns:
# Uh oh. Are you lost?
1 statement and provides flexible matching control.

Làm thế nào để các câu lệnh trong trường hợp chuyển đổi hoạt động trong Python?

Cách tạo các câu lệnh trong trường hợp chuyển đổi trong Python với if-else

# Building a simple match-case statement in Python
response_code = 400

match response_code:
    case 200:
        print("Everything's peachy!")
    case 300:
        print("You're going somewhere else!")
    case 400:
        print("Uh oh. Are you lost?")
    case 500:
        print("Yikes. Something went wrong!")

# Returns:
# Uh oh. Are you lost?

Chúng ta có thể thấy rằng đây là một ví dụ khá đơn giản! Tuy nhiên, bạn cũng có thể biết rằng mã phản hồi HTTP được công phu hơn một chút. Ví dụ, bạn có thể có 301, 404, v.v.

Trong phần tiếp theo, bạn sẽ học cách sử dụng các điều kiện trong các câu lệnh phù hợp với Python.

Các trường hợp kết hợp phù hợp trong các câu hỏi về trường hợp trận đấu Python

Chúng tôi biết rằng mã trạng thái HTTP đã giành được chỉ là chính xác 200, 300, 400 và 500. Chúng tôi có thể viết các câu lệnh độ dài cho mỗi câu, nhưng một số trong số chúng có thể được kết hợp. Trong các câu lệnh Case của Python, chúng ta có thể thực hiện việc này bằng toán tử OR (ống),

CONSTANTS = ['a','b', ...] # a (possibly large) iterable

def demo(item):
    match item:
        case item if item in CONSTANTS:
            return f"{item} matched"
        case other:
            return f"No match for {item}"
6.

# Combining cases in Python match-case statements
response_code = 404

match response_code:
    case 400:
        print("Server can't understand.")
    case 401 | 403:
        print("Server refused to send back.")
    case 404:
        print("Server can't find.")

# Returns:
# Server can't find.

Bằng cách kết hợp một số điều kiện của chúng tôi, mã của chúng tôi vừa dễ viết và đọc hơn.

Các mẫu phù hợp trong các câu lệnh Case của Python

Điều tuyệt vời về các câu hỏi trong trường hợp trận đấu Python là chúng cho phép phù hợp với các điều kiện khác nhau. Vì mã phản hồi HTTP bị chia thành các giá trị kiểu 2xx, 3xx, 4xx và 5xx, chúng ta có thể xem xét giá trị đầu tiên trong phản hồi đó và trả về trường hợp chuyển đổi:

# Matching patterns in Python match-case statements
response_code = 301

match int(str(response_code)[0]):
    case 2:
        print("Everything's peachy!")
    case 3:
        print("You're going somewhere else!")
    case 4:
        print("Uh oh. Are you lost?")
    case 5:
        print("Yikes. Something went wrong!")

# Returns:
# You're going somewhere else!

Cung cấp giá trị mặc định trong các câu lệnh Case của Python

Python cũng làm cho việc thêm các trường hợp mặc định vào các câu hỏi của bạn rất dễ dàng. Bởi vì Python đánh giá dựa trên một mẫu, bạn chỉ có thể cung cấp một biến dùng một lần, thông thường

# Building a simple match-case statement in Python
response_code = 400

match response_code:
    case 200:
        print("Everything's peachy!")
    case 300:
        print("You're going somewhere else!")
    case 400:
        print("Uh oh. Are you lost?")
    case 500:
        print("Yikes. Something went wrong!")

# Returns:
# Uh oh. Are you lost?
8, để thay thế một trường hợp bắt tất cả.

Hãy để xem làm thế nào điều này có thể hoạt động:

# Providing default cases
response_code = 600

match int(str(response_code)[0]):
    case 2:
        print("Everything's peachy!")
    case 3:
        print("You're going somewhere else!")
    case 4:
        print("Uh oh. Are you lost?")
    case 5:
        print("Yikes. Something went wrong!")
    case _:
        print("Yikers. I don't know that one.")

# Returns:
# Yikers. I don't know that one.

Kiểu và cấu trúc phù hợp trong các câu lệnh Case của Python

Một tính năng đáng kinh ngạc khác của Python là khả năng phù hợp với cả loại và cấu trúc. Điều này có nghĩa là Python có thể giải thích liệu một mục có phải là một đối tượng có thể đi được mà nó có thể trích xuất các giá trị hay không. Tương tự, nó có thể nhìn vào kích thước và trang điểm của cấu trúc đó để lượm lặt ý nghĩa.

Hãy cùng xem một ví dụ đơn giản:

# Matching structure in Python switch-case
match values:
    case [a]:
        print(f'Only one item: {a}')
    case [a, b]:
        print(f'Two items: {a}, {b}')
    case [a, b, c]:
        print(f'Three items: {a}, {b}, and {c}')
    case [a, b, c, *rest]:
        print(f'More than three items: {a}, {b}, {c}, as well as: {rest}')

Ở đây, tuyên bố

# Building a simple match-case statement in Python
response_code = 400

match response_code:
    case 200:
        print("Everything's peachy!")
    case 300:
        print("You're going somewhere else!")
    case 400:
        print("Uh oh. Are you lost?")
    case 500:
        print("Yikes. Something went wrong!")

# Returns:
# Uh oh. Are you lost?
9 của chúng tôi đánh giá cho cấu trúc. Cụ thể, nếu danh sách chỉ có một mục duy nhất, trường hợp đầu tiên được chạy:

# Matching a structure
values = ['John']

# Returns:
# Only one name: John

Hãy cùng xem xét trường hợp bao gồm nhiều hơn ba mục. Chúng tôi sử dụng

# Combining cases in Python match-case statements
response_code = 404

match response_code:
    case 400:
        print("Server can't understand.")
    case 401 | 403:
        print("Server refused to send back.")
    case 404:
        print("Server can't find.")

# Returns:
# Server can't find.
0 để giải nén bất kỳ mục nào sau lần đầu tiên. Điều này có nghĩa là nó không quan trọng có bao nhiêu mặt hàng trong danh sách đó:

# Matching a complex structure
values = ['John', 'Matt', 'Kate', 'Nik', 'Evan']

# Returns:
# More than three names: John, Matt, Kate, as well as: Nik, Evan

Kiểm tra các loại trong các câu lệnh Case của Python

Các câu lệnh Case của Python cũng có thể được sử dụng để kiểm tra các loại thứ gì đó được truyền vào. Hãy để di chuyển điều này đến một ví dụ nâng cao hơn và tạo một hàm cho phép chúng tôi vượt qua các giá trị khác nhau.

# Checking types with 'as' in Python match-case statements
def type_of(var):
    match var:
        case int() | float() as var:
            return "Number"
        case dict() as var:
            return "Dictionary"
        case list() | tuple() | set() as var:
            return "List, tuple, or set"
        case str() as var:
            return "String"
        case _:
            return "Something else"

print(type_of(3))
print(type_of({1,2}))

# Returns:
# Number
# List, tuple, or set

Bảo vệ các câu hỏi về trường hợp trận đấu Python

Một điều hữu ích khác Python Case Case có thể làm là bảo vệ một số trường hợp được thực thi.

Hãy nói rằng bạn đã nhận được một từ điển có chứa tên học sinh, số lượng các khóa học mà họ đã tham gia và điểm tổng thể của họ. Bạn muốn trao cho sinh viên các giải thưởng khác nhau dựa trên số lượng khóa học và điểm tổng thể của họ.

Bạn có thể viết các câu lệnh CASE được bảo vệ trong trường hợp này bằng cách sử dụng từ khóa

# Combining cases in Python match-case statements
response_code = 404

match response_code:
    case 400:
        print("Server can't understand.")
    case 401 | 403:
        print("Server refused to send back.")
    case 404:
        print("Server can't find.")

# Returns:
# Server can't find.
1, hoạt động tương tự như nội tuyến nếu trong Python.

CONSTANTS = ['a','b', ...] # a (possibly large) iterable

def demo(item):
    match item:
        case item if item in CONSTANTS:
            return f"{item} matched"
        case other:
            return f"No match for {item}"
0

Trong trường hợp này, trước tiên chúng tôi cung cấp các giá trị cho từ điển của chúng tôi trong trận đấu của chúng tôi. Sử dụng các biến này, sau đó chúng ta có thể bảo vệ chống lại chúng cũng như sử dụng chúng trong câu lệnh

# Combining cases in Python match-case statements
response_code = 404

match response_code:
    case 400:
        print("Server can't understand.")
    case 401 | 403:
        print("Server refused to send back.")
    case 404:
        print("Server can't find.")

# Returns:
# Server can't find.
2 kết quả của chúng ta.

Cách tạo các câu lệnh trong trường hợp chuyển đổi trong Python với if-else

Trong phần này và ba phần sau, bạn sẽ học cách mô phỏng các câu lệnh Case của Python bằng các phương pháp khác nhau trước phiên bản Python 3.10. Trong phần này, bạn sẽ học cách sử dụng các câu lệnh IF-Else để mô phỏng các câu lệnh Case chuyển đổi trong Python.

Tất cả các ví dụ trên sẽ hoạt động, chúng sẽ không trông thanh lịch hoặc sạch sẽ. Trước tiên, hãy bắt đầu với một ví dụ cơ bản hơn:

CONSTANTS = ['a','b', ...] # a (possibly large) iterable

def demo(item):
    match item:
        case item if item in CONSTANTS:
            return f"{item} matched"
        case other:
            return f"No match for {item}"
1

Chúng ta có thể thấy rằng điều này trông rất giống với các câu lệnh trường hợp chuyển đổi mà chúng tôi đã viết ở trên. Tuy nhiên, chúng tôi được yêu cầu liên tục lặp lại giá trị của biến của chúng tôi để đánh giá chống lại. Trong trường hợp này, điều đó vẫn có vẻ ổn, nhưng nếu điều kiện của chúng ta ngày càng lâu hơn có thể chứng minh khác nhau.

Tương tự, chúng tôi có thể cung cấp phản hồi bắt tất cả nếu không có điều kiện nào được đáp ứng, sử dụng từ khóa

# Combining cases in Python match-case statements
response_code = 404

match response_code:
    case 400:
        print("Server can't understand.")
    case 401 | 403:
        print("Server refused to send back.")
    case 404:
        print("Server can't find.")

# Returns:
# Server can't find.
3:

CONSTANTS = ['a','b', ...] # a (possibly large) iterable

def demo(item):
    match item:
        case item if item in CONSTANTS:
            return f"{item} matched"
        case other:
            return f"No match for {item}"
2

Cách tạo các câu lệnh trong trường hợp chuyển đổi trong Python với từ điển

Mặc dù tuyên bố

CONSTANTS = ['a','b', ...] # a (possibly large) iterable

def demo(item):
    match item:
        case item if item in CONSTANTS:
            return f"{item} matched"
        case other:
            return f"No match for {item}"
9 cung cấp rất nhiều sự linh hoạt, nhưng nó thường ít thanh lịch hơn để viết và đọc. Từ điển có thể được sử dụng cho các câu lệnh trường hợp chuyển đổi đơn giản, thậm chí có thể thực thi các chức năng.

Hãy cùng xem một ví dụ, nơi chúng ta vượt qua trong một số tháng và nó trả lại một mùa:

CONSTANTS = ['a','b', ...] # a (possibly large) iterable

def demo(item):
    match item:
        case item if item in CONSTANTS:
            return f"{item} matched"
        case other:
            return f"No match for {item}"
3

Nếu thay vào đó, chúng tôi không muốn trả về một giá trị, chúng tôi có thể xác định một số hàm và có giá trị của từ điển của chúng tôi là các thiết bị gọi của các hàm đó:

CONSTANTS = ['a','b', ...] # a (possibly large) iterable

def demo(item):
    match item:
        case item if item in CONSTANTS:
            return f"{item} matched"
        case other:
            return f"No match for {item}"
4

Chúng ta có thể thấy làm thế nào điều này có thể khá hữu ích để mở rộng hành vi chương trình được đưa ra một số điều kiện nhất định. Ví dụ, bạn có thể nhận được giá trị từ điển từ một yêu cầu HTTP và chạy các đoạn mã khác nhau với mã trạng thái của yêu cầu.

Sự kết luận

Phiên bản Python 3.10 mở ra một thế giới mới về khả năng với các câu hỏi trong trường hợp trận đấu cực kỳ linh hoạt. Bài viết này đã khám phá những câu lệnh trong trường hợp chuyển đổi và làm thế nào để sử dụng chúng theo nhiều cách khác nhau. Bạn đã học cách xây dựng các tuyên bố đơn giản, tuyên bố có điều kiện và các tuyên bố bảo vệ hoặc trích xuất thông tin bổ sung.

Cuối cùng, bạn cũng đã học được cách sử dụng các câu lệnh và từ điển của Python if-Else để mô phỏng các câu lệnh trường hợp chuyển đổi cho các phiên bản Python cũ hơn.

Tài nguyên bổ sung

Để tìm hiểu thêm về các chủ đề liên quan, hãy xem các hướng dẫn dưới đây:

  • Từ điển Python: Tổng quan đầy đủ
  • Điều kiện Python, Booleans và So sánh
  • Break, tiếp tục và vượt qua: Kiểm soát dòng chảy Python
  • Lập trình hướng đối tượng Python (OOP) cho khoa học dữ liệu

Python 3.9 có trường hợp phù hợp không?

Trong Python 3.9, bạn đã sử dụng một câu lệnh IF với bốn nhánh. Trước tiên, chúng tôi xác định, sau từ khóa khớp, biến mà chúng tôi muốn khớp. Sau đó, mỗi trường hợp bắt đầu với từ khóa trường hợp, theo sau là mẫu chúng tôi muốn kiểm tra.each case starts with the case keyword, followed by the pattern we want to check.

Trường hợp trận đấu Python có cần phá vỡ không?

Bạn không cần phải phá vỡ các trường hợp trận đấu.Bạn không cần nghỉ giải lao có lẽ nếu bạn không muốn chúng phá vỡ vòng lặp.Vì vậy, như đã nói, không cần nghỉ trong trận đấu Python.Bên cạnh đó, cũng có một mã thông báo tiếp tục cho phép bạn dừng lặp lại mà không phá vỡ vòng lặp.. You don't need that breaks probably if you don't want them to break the loop. So, as already told, no need for break in python match. On a side note, there is also a continue token which allow you to stop an iteration without breaking the loop.

Là trường hợp phù hợp nhanh hơn nếu

Có, theo như tôi biết, các cấu trúc khớp/trường hợp thường nhanh hơn các cấu trúc if/elif/other.Sử dụng chúng bất cứ nơi nào có thể vượt qua các cấu trúc nếu/elif/other.match/case structures are generally faster than if/elif/else structures. Use them wherever possible over if/elif/else structures.

Python 3.8 có trường hợp phù hợp không?

Trường hợp trận đấu Python tương tự như câu lệnh Case Switch, được công nhận là khớp mẫu cấu trúc trong Python.Lưu ý: Cấu trúc trường hợp khớp có sẵn cho Python phiên bản 3.10 trở đi.The match case structure is available for python version 3.10 and onwards.