Khớp mẫu trong danh sách python

Nhưng nó không phải là câu lệnh switch chung hoặc garden của bạn như bạn thấy trong C hoặc Java — tất nhiên là không, đây là Python. Trăn 3. 10 triển khai So khớp mẫu cấu trúc có thể đơn giản như câu lệnh chuyển đổi nhưng cũng có thể hơn thế nữa

Tôi đã trình bày kiến ​​thức cơ bản về So khớp mẫu cấu trúc tại đây — bài viết này đi sâu hơn một chút vào chủ đề này, xem xét việc nắm bắt các mẫu phù hợp (lấy giá trị của một mẫu phù hợp có thể có nhiều hơn một giá trị) và thêm điều kiện cho các mẫu

Nhưng, trước tiên, hãy xem lại những điều cơ bản. Các mẫu đối sánh cấu trúc được triển khai với từ khóa match. Điều này bao gồm một khối có chứa một danh sách các câu lệnh case cho mỗi trận đấu. Bạn có thể xem cú pháp trong đoạn mã bên dưới — nó rất gọn gàng và dễ hiểu

Đoạn mã dưới đây chạy một vòng lặp đưa ra các giá trị 1,2,3,4 và 5 cho biến

He's gone to meet his maker.
He should be pushing up the daisies.
He's shuffled off his mortal coil.
He's gone to meet his maker.
This is a dead parrot!
0. Chúng tôi xác định bốn trường hợp, trường hợp đầu tiên khớp với các số 1 hoặc 4 (ký tự
He's gone to meet his maker.
He should be pushing up the daisies.
He's shuffled off his mortal coil.
He's gone to meet his maker.
This is a dead parrot!
1 là toán tử OR); . Các trường hợp được xử lý theo thứ tự để ký tự đại diện chỉ khớp nếu bất kỳ trường hợp nào trước đó không khớp. Ngoài ra, không giống như C, không có câu lệnh 'break' — sau khi khối mã cho mỗi trường hợp được thực thi, điều khiển được chuyển đến cuối của match

for quote in [1,2,3,4,5]:
match quote:
case 1|4:
print("He's gone to meet his maker.")
case 2:
print("He should be pushing up the daisies.")
case 3:
print("He's shuffled off his mortal coil.")
case _:
print("This is a dead parrot!")

Đây là kết quả của việc chạy mã

He's gone to meet his maker.
He should be pushing up the daisies.
He's shuffled off his mortal coil.
He's gone to meet his maker.
This is a dead parrot!

Chụp các mẫu phù hợp

Đôi khi, khi khớp một mẫu OR, chúng tôi muốn có thể sử dụng giá trị khớp

Hãy tưởng tượng một số mọt sách, với sự quen thuộc tình cờ với Python, đã quyết định trình bày một tập lệnh Monty Python như thế này

script = [["The Dead Parrot Sketch"],
["Cast","Customer","Shop Owner"],
["Customer","He's gone to meet his maker."],
["Owner","Nah, he's resting."],
["Customer","He should be pushing up the daisies."],
["Owner", "He's pining for the fjords"],
["Customer", "He's shuffled off his mortal coil."],
["Customer", "This is a dead parrot!"]]

Đó là một danh sách các danh sách. Cái đầu tiên chứa một chuỗi đơn - tiêu đề. Thứ hai, dàn diễn viên là chuỗi “Cast” theo sau là một số chuỗi khác đại diện cho nhân vật kịch tính. Phần còn lại là danh sách hai chuỗi, diễn viên và dòng mà người đó sẽ nói

Không có giải thưởng cho thiết kế dữ liệu, ở đây

Làm thế nào để chúng tôi giải thích cấu trúc này? . Dàn diễn viên được so khớp bằng cách chỉ định một danh sách bắt đầu bằng chuỗi “Truyền” và theo sau là một số phần tử khác (

He's gone to meet his maker.
He should be pushing up the daisies.
He's shuffled off his mortal coil.
He's gone to meet his maker.
This is a dead parrot!
3 thực hiện điều này). Các dòng của tập lệnh được khớp với trường hợp cuối cùng. nó khớp với hai yếu tố, yếu tố đầu tiên là “Khách hàng” hoặc “Chủ sở hữu” và yếu tố thứ hai là
He's gone to meet his maker.
He should be pushing up the daisies.
He's shuffled off his mortal coil.
He's gone to meet his maker.
This is a dead parrot!
4 sẽ nắm bắt được dòng kịch bản. Vấn đề là chúng ta muốn sử dụng giá trị của “Customer” hoặc “Owner” trong đoạn mã sau nên chúng ta ràng buộc nó với biến
He's gone to meet his maker.
He should be pushing up the daisies.
He's shuffled off his mortal coil.
He's gone to meet his maker.
This is a dead parrot!
5 bằng cách sử dụng từ khóa
He's gone to meet his maker.
He should be pushing up the daisies.
He's shuffled off his mortal coil.
He's gone to meet his maker.
This is a dead parrot!
6

for line in script:
match line:
case [title]:
print(title)
case ["Cast",*actors]:
print("Cast:")
for a in actors: print(a)
print("---")
case [("Customer"|"Owner") as person, line] :
print(f"{person}: {line}")

Chạy mã, chúng tôi nhận được điều này

The Dead Parrot Sketch
Cast:
Customer
Shop Owner
---
Customer: He's gone to meet his maker.
Owner: Nah, he's resting.
Customer: He should be pushing up the daisies.
Owner: He's pining for the fjords
Customer: He's shuffled off his mortal coil.
Customer: This is a dead parrot!

Trường hợp có điều kiện

Đây là trường hợp chúng tôi muốn tạo đối sánh với điều kiện đáp ứng một số tiêu chí nhất định. Nhìn vào mã dưới đây. chúng tôi có một danh sách các nhân vật trong Harry Potter và một danh sách các nhân vật trong Hitchhiker's Guide to the Galaxy

Chúng tôi yêu cầu nhập tên rồi thử khớp tên đó

harrypotter = ["Harry","Hermione","Ron"]hhgtg = ["Arthur","Ford","Zaphod","Trillian"]name = input("Enter a name: ")match name:
case n if n in hhgtg:
print(f"{n} is a character in Hitchhiker's guide to the Galaxy.")
case n if n in harrypotter:
print(f"{n} is a character in the Harry Potter stories.")
case _:
print(f"{n} is an unknown character.")

Và sử dụng việc xây dựng

case <match> if <match> in <list> 

chúng tôi chỉ khớp một trường hợp nếu nó đáp ứng điều kiện là chuỗi chúng tôi muốn khớp có trong danh sách. Mã này khá dễ hiểu, tôi nghĩ vậy, vì vậy đây là kết quả của một vài lần chạy chương trình

Enter a name: Harry
Harry is a character in the Harry Potter stories.
Enter a name: Zaphod
Zaphod is a character in Hitchhiker's guide to the Galaxy.
Enter a name: Elizabeth Bennet
Elizabeth Bennet is an unknown character.

Tất nhiên, trường hợp cuối cùng là thẻ hoang dã sẽ khớp với bất kỳ thứ gì chưa được xử lý trước đó

Để tìm hiểu thêm, hãy truy cập Python. org và đọc PEP 636, đây là hướng dẫn về So khớp mẫu cấu trúc

Và để tìm hiểu thêm về các tính năng mới trong Python 3. 10, bạn có thể xem các bài báo khác trên Phương tiện, chẳng hạn như Các tính năng mới của James Briggs trong Python 3. 10 hoặc hoặc Tất cả các tính năng và thay đổi quan trọng của Martin Heinz trong Python 3. 10

Như tôi đã đề cập trong bài viết trước, bạn không nên sử dụng Python 3. 10 một cách nghiêm túc, bởi vì nó vẫn là bản phát hành beta nhưng bản beta đó có thể tải xuống từ trang web Python nếu bạn muốn thử với nó

Python có hỗ trợ khớp mẫu không?

Cú pháp khớp mẫu được giới thiệu trong Python 3. 10 cho phép sử dụng các kỹ thuật lập trình mới mạnh mẽ để đưa ra quyết định trong ứng dụng.

Phiên bản Python nào có khớp mẫu?

'Structural Pattern Matching' mới được giới thiệu trong Python 3. 10 . Cú pháp cho tính năng mới này đã được đề xuất trong PEP 622 vào tháng 6 năm 2020. Câu lệnh khớp mẫu của Python được lấy cảm hứng từ cú pháp tương tự được tìm thấy trong Scala, Erlang và các ngôn ngữ khác.

Khớp mẫu là gì, hãy cho một ví dụ?

Kết hợp mẫu được dùng để xác định xem các tệp nguồn của ngôn ngữ cấp cao có đúng cú pháp hay không . Nó cũng được sử dụng để tìm và thay thế một mẫu phù hợp trong văn bản hoặc mã bằng một văn bản/mã khác. Bất kỳ ứng dụng nào hỗ trợ chức năng tìm kiếm đều sử dụng khớp mẫu theo cách này hay cách khác.

Lệnh nào dành cho khớp mẫu?

Kết hợp mẫu được sử dụng bởi các lệnh trình bao, chẳng hạn như lệnh ls , trong khi các biểu thức chính quy được sử dụng để tìm kiếm các chuỗi văn bản trong một .