Sebagian besar jawaban di sini sudah cukup lama, dan terutama yang diterima, jadi sepertinya layak diperbarui.
Pertama, FAQ Python resmi membahas hal ini, dan merekomendasikan elif
rantai untuk kasus sederhana dan dict
untuk kasus yang lebih besar atau lebih kompleks. Ini juga menyarankan serangkaian visit_
metode (gaya yang digunakan oleh banyak kerangka kerja server) untuk beberapa kasus:
def dispatch(self, value):
method_name = 'visit_' + str(value)
method = getattr(self, method_name)
method()
FAQ juga menyebutkan PEP 275 , yang ditulis untuk mendapatkan keputusan resmi sekali-untuk-semua tentang penambahan pernyataan beralih gaya-C. Tetapi PEP itu sebenarnya ditangguhkan ke Python 3, dan hanya secara resmi ditolak sebagai proposal terpisah, PEP 3103 . Jawabannya tentu saja tidak — tetapi kedua PEP memiliki tautan ke informasi tambahan jika Anda tertarik pada alasan atau sejarahnya.
Satu hal yang muncul beberapa kali (dan dapat dilihat dalam PEP 275, meskipun itu dipotong sebagai rekomendasi sebenarnya) adalah bahwa jika Anda benar-benar terganggu dengan memiliki 8 baris kode untuk menangani 4 kasus, vs. 6 baris yang Anda miliki di C atau Bash, Anda selalu dapat menulis ini:
if x == 1: print('first')
elif x == 2: print('second')
elif x == 3: print('third')
else: print('did not place')
Ini tidak sepenuhnya didorong oleh PEP 8, tetapi itu dapat dibaca dan tidak terlalu tidak otomatis.
Selama lebih dari satu dekade sejak PEP 3103 ditolak, masalah pernyataan kasus C-style, atau bahkan versi yang sedikit lebih kuat di Go, telah dianggap mati; setiap kali ada yang membawanya pada python-ideas atau -dev, mereka dirujuk ke keputusan lama.
Namun, gagasan pencocokan pola gaya ML penuh muncul setiap beberapa tahun, terutama karena bahasa seperti Swift dan Rust telah mengadopsinya. Masalahnya adalah sulit untuk menggunakan banyak dari pencocokan pola tanpa tipe data aljabar. Sementara Guido bersimpati pada ide tersebut, tidak ada yang datang dengan proposal yang cocok dengan Python. (Anda dapat membaca strawman 2014 saya sebagai contoh.) Ini bisa berubah dengan dataclass
di 3.7 dan beberapa proposal sporadis untuk yang lebih kuat enum
untuk menangani jenis penjumlahan, atau dengan berbagai proposal untuk berbagai jenis ikatan lokal-pernyataan (seperti PEP 3150 , atau set proposal yang saat ini sedang dibahas di -ideas). Tapi sejauh ini, belum.
Ada juga kadang-kadang proposal untuk pencocokan gaya 6-Perl, yang pada dasarnya merupakan mishmash dari segalanya mulai dari elif
regex ke jenis-pengiriman tunggal-switching.