Python mungkin mendapatkan sintaks pencocokan pola

Pencipta bahasa Python sedang mempertimbangkan proposal baru, PEP 622, yang akhirnya akan membawa sintaks pernyataan pencocokan pola ke Python. Pernyataan pencocokan pola baru akan memberikan programmer Python cara yang lebih ekspresif dalam menangani data terstruktur, tanpa harus menggunakan solusi alternatif. 

Pencocokan pola adalah fitur umum dari banyak bahasa pemrograman, seperti switch/casedi C. Ini memungkinkan salah satu dari sejumlah tindakan yang mungkin diambil berdasarkan nilai variabel atau ekspresi tertentu. Meskipun Python kekurangan sintaks asli untuk pencocokan pola, hal ini memungkinkan untuk mengemulasinya dengan  if/elif/elserantai atau pencarian kamus.

PEP 622 mengusulkan metode untuk mencocokkan ekspresi dengan sejumlah jenis pola menggunakan match/casesintaks:

cocokkan sesuatu: kasus 0 | 1 | 2: huruf cetak ("Angka kecil") [] | [_]: print ("Urutan singkat") case str () | bytes (): print ("Sesuatu seperti string") case _: print ("Sesuatu yang lain")

Jenis pencocokan pola yang didukung mencakup literal, nama, nilai konstanta, urutan, pemetaan (pada dasarnya, keberadaan pasangan nilai kunci dalam ekspresi), kelas, campuran di atas, atau salah satu dari ekspresi bersyarat plus tersebut. Setiap kecocokan yang ambigu atau tidak mungkin diselesaikan akan memunculkan pengecualian pada waktu proses.

Objek dapat menangani tes kecocokan melalui protokol baru yang disebut __match__protokol. Jika sebuah objek mengimplementasikan __match__metode, itu bisa digunakan untuk menguji apakah itu cocok dengan pola kelas yang diberikan dan mengembalikan respon yang sesuai.

PEP 622 juga akan memungkinkan pemeriksa tipe statis untuk memverifikasi bahwa kecocokan dapat diverifikasi. @sealedDekorator baru untuk sebuah kelas menunjukkan kepada pemeriksa tipe bahwa setiap subkelas dari kelas tersebut didefinisikan dalam modul yang sama dengan kelas dasar.

PEP sebelumnya untuk menambahkan pencocokan pola - PEP 275 dan PEP 3103, masing-masing diusulkan pada tahun 2001 dan 2006 - ditolak karena kurangnya dukungan rakyat. PEP 3103 dirancang oleh pencipta Python Guido van Rossum. PEP baru, yang ditulis oleh van Rossum dan beberapa orang lainnya, bertujuan untuk memberikan ekspresi reguler untuk pencocokan objek, bukan sekadar if/elif/else pengganti sederhana . Para penulis mencatat bahwa banyak aspek dari PEP ini terinspirasi oleh cara kerja pencocokan pola di Rust dan Scala. 

Bagaimana semua ini akan diterapkan di bawah tenda masih dibahas. Implementasi yang diusulkan dalam PEP 622 akan menghasilkan urutan bytecode yang sama sebagai if/elif/elserantai. switch/caseBlok yang lebih besar bisa menjadi kurang berkinerja tergantung pada seberapa banyak logika kondisional yang disertakan di masing-masing blok case. Tetapi PEP memperjelas bahwa sejumlah pendekatan dan pengoptimalan kinerja (misalnya, memoisasi) masih ada di atas meja.

Bahkan jika PEP akhirnya diterima, banyak hal tentang hal itu mungkin berubah. Satu masalah yang mungkin akan diperdebatkan adalah penggunaan case _: bukan else: sebagai klausa penampung-semua untuk  switch pernyataan tersebut. _ digunakan sebagai variabel sementara dalam banyak konteks, dan menimpa perilakunya secara sepihak dapat membuat pengembang tidak tertarik.