Hướng dẫn python match case multiple values - python so khớp nhiều giá trị

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 multiple values - python so khớp nhiều giá trị

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

6707 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 multiple values - python so khớp nhiều giá trị

BlakeblakeBlake

8048 Huy hiệu bạc21 Huy hiệu đồng8 silver badges21 bronze badges

Trong hướng dẫn này, bạn sẽ tìm hiểu 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.youll 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ì?

Câu lệnh

# Building a simple match-case statement in Pythonresponse_code = 400match 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 Pythonresponse_code = 400match 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ã. Đó là 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.

Trong nhiều năm, Pythonistas đã tìm kiếm các tuyên bố

# Building a simple match-case statement in Pythonresponse_code = 400match 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. Chúng là phổ biến trong hầu hết các ngôn ngữ lập trình khác và nhiều người cảm thấy đó là một thiếu sót kỳ lạ khi không bao gồm chúng vào ngôn ngữ. Điều này yêu cầu các lập trình viên Python sử dụng các phương thức khác nhau, chẳng hạn như các câu lệnh
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, để mô phỏng câu lệnh
# Building a simple match-case statement in Pythonresponse_code = 400match 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.

Năm 2020, thông qua PEP 634, Python đã giới thiệu khái niệm kết hợp mô hình cấu trúc trong Python. Điều này đại diện cho các tuyên bố ____22 cuối cùng cũng đến với Python một cách chính thức! Hơn nữa, đó là Python thực sự vượt ra ngoài câu lệnh

# Building a simple match-case statement in Pythonresponse_code = 400match 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 đơn giản và cung cấp điều khiển phù hợp linh hoạt.Structural Pattern Matching in Python. This represents the
# Building a simple match-case statement in Pythonresponse_code = 400match 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! Whats more, is that Python actually extends beyond a simple
# Building a simple match-case statement in Pythonresponse_code = 400match 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?

Bắt đầu trong Python phiên bản 3.10, giờ đây bạn có quyền truy cập vào các câu lệnh trong trường hợp chuyển đổi trong Python! Tạo một câu lệnh Match Python rất đơn giản: khớp một số biến với một trường hợp (hoặc nhiều trường hợp). Hãy bắt đầu bằng cách xem xét một ví dụ đơn giản:

# Building a simple match-case statement in Pythonresponse_code = 400match 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ẽ tìm hiểu cách sử dụng các điều kiện trong các câu lệnh của 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 sẽ không chính xác là 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 statementsresponse_code = 404match 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 statementsresponse_code = 301match 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 Pythonresponse_code = 400match 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 casesresponse_code = 600match 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 xem một ví dụ đơn giản:

# Matching structure in Python switch-casematch 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 Pythonresponse_code = 400match 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 structurevalues = ['John']# Returns:# Only one name: John

Hãy 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 statementsresponse_code = 404match 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ục trong danh sách đó:

# Matching a complex structurevalues = ['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 ta vượt qua các giá trị khác nhau.

# Checking types with 'as' in Python match-case statementsdef 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 một tên sinh viên, số lượng các khóa học 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 statementsresponse_code = 404match 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 statementsresponse_code = 404match 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ẽ tìm hiểu 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ẽ tìm hiểu cách sử dụng các câu lệnh IF-Else để mô phỏng các câu lệnh Case 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ẽ. Hãy bắt đầu với một ví dụ cơ bản hơn trước:

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 statementsresponse_code = 404match 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

Trong khi 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 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 có trường hợp phù hợp không?

Python 3.10 đã được phát hành vào giữa năm 2021 và đi kèm với kết hợp mô hình cấu trúc, còn được gọi là một tuyên bố trường hợp phù hợp. Đây là tính năng mới quan trọng nhất của Python 3.10; Chức năng mới cho phép bạn dễ dàng kiểm soát luồng chương trình của mình bằng cách thực hiện một số phần của mã nếu điều kiện (hoặc trường hợp) được đáp ứng.. This is Python 3.10's most important new feature; the new functionality allows you to more easily control the flow of your programs by executing certain parts of code if conditions (or cases) are met.

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.

Trường hợp khớp là nhanh hơn nếu khác?

Python 3.10 Các câu lệnh khớp nhanh hơn ở các chuỗi khớp mẫu so với các câu chuyện if tương đương.Nhanh hơn nhiều.Các hàm thứ hai chạy nhanh hơn 86% so với đầu tiên.. MUCH faster. The second functions runs 86% faster than the first.

Có phải trường hợp trận đấu Python 3.8 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.