Guido van Rossum
Implementasi baru ini mirip dengan operator "match" yang disediakan di Scala, Rust, dan F#, yang membandingkan hasil ekspresi tertentu dengan daftar pola yang tercantum dalam blok berdasarkan operator "case". Berbeda dengan operator "switch" yang tersedia di C, Java, dan JavaScript, ekspresi berbasis "match" menawarkan lebih banyak hal
def http_kesalahan(status):
status pertandingan:
kasus 400:
kembalikan "Permintaan buruk"
kasus 401|403|404:
kembali "Tidak diizinkan"
kasus 418:
kembali "Aku adalah teko"
kasus_:
kembalikan "Sesuatu yang lain"
Misalnya, Anda bisa membongkar objek, tupel, daftar, dan urutan arbitrer untuk mengikat variabel berdasarkan nilai yang ada. Diperbolehkan untuk menentukan templat bertingkat, menggunakan kondisi “jika” tambahan dalam templat, menggunakan masker (“[x, y, *rest]”), pemetaan kunci/nilai (misalnya, {“bandwidth”: b, “latensi ”: l} untuk mengekstrak nilai dan kamus "bandwidth" dan "latensi", mengekstrak subtemplat (":=" operator), menggunakan konstanta bernama dalam templat. Di kelas, dimungkinkan untuk menyesuaikan perilaku pencocokan menggunakan metode “__match__()”.
dari kelas data impor kelas data
@dataclass
kelas Poin:
x:int
kamu:int
def dimana(titik):
titik pertandingan:
Poin kasus (0, 0):
mencetak("Asal")
kasus Poin (0, y):
mencetak(f"Y={y}")
Kasus Poin (x, 0):
mencetak(f"X={x}")
Poin kasus():
mencetak("Di tempat lain")
kasus_:
print("Tidak ada poin")
titik pertandingan:
kasus Titik(x, y) jika x == y:
mencetak(f"Y=X pada {x}")
Kasus Poin (x, y):
print(f"Tidak pada diagonal")
MERAH, HIJAU, BIRU = 0, 1, 2
warna sama:
kasus .MERAH:
print("Saya melihat warna merah!")
kasus .HIJAU:
print("Rumput berwarna hijau")
kasus .BLU
E:
print(“Saya merasa sedih :(“)
Satu set telah disiapkan untuk ditinjau
Sumber: opennet.ru