Buradaki cevapların çoğu oldukça eski ve özellikle kabul edilenler, bu yüzden güncellenmeye değer görünüyor.
İlk olarak, resmi Python SSS bu konuyu kapsar ve elif
basit vakalar için ve dict
daha büyük veya daha karmaşık vakalar için zinciri önerir . Ayrıca visit_
, bazı durumlarda bir dizi yöntem (birçok sunucu çerçevesi tarafından kullanılan bir stil) önerir :
def dispatch(self, value):
method_name = 'visit_' + str(value)
method = getattr(self, method_name)
method()
SSS ayrıca C-tarzı anahtar ifadeleri ekleme konusunda resmi bir kez ve hep birlikte karar almak için yazılan PEP 275'ten de bahsetmektedir . Ancak bu PEP aslında Python 3'e ertelendi ve sadece resmi olarak ayrı bir teklif olarak reddedildi, PEP 3103 . Yanıt elbette hayırdı, ancak nedenlerle veya geçmişle ilgileniyorsanız iki PEP'in ek bilgilere bağlantıları vardır.
Birden fazla kez ortaya çıkan bir şey (ve gerçek bir öneri olarak kesilmiş olsa da PEP 275'te görülebilir), 4 vakayı işlemek için 8 satır kodla gerçekten rahatsız olursanız, C veya Bash'taki satırlara her zaman şunu yazabilirsiniz:
if x == 1: print('first')
elif x == 2: print('second')
elif x == 3: print('third')
else: print('did not place')
Bu PEP 8 tarafından tam olarak teşvik edilmez, ancak okunabilir ve çok tekdüze değil.
PEP 3103'ün reddedilmesinden bu yana geçen on yıldan fazla bir süredir, C-tarzı vaka ifadeleri, hatta Go'daki biraz daha güçlü bir sürümün ölü olduğu düşünülüyordu; ne zaman birisi python-fikirleri ya da -dev'i ortaya koyarsa, eski karara yönlendirilirler.
Bununla birlikte, tam ML tarzı desen eşleştirme fikri, özellikle Swift ve Rust gibi diller onu benimsediğinden, birkaç yılda bir ortaya çıkar. Sorun, cebirsel veri türleri olmadan desen eşleşmesinden çok fazla faydalanmanın zor olmasıdır. Guido bu fikre sempati duysa da, hiç kimse Python'a çok iyi uyan bir teklif bulamadı. ( Bir örnek için 2014 strawman'ımı okuyabilirsiniz .) Bu, 3.7'dedataclass
ve enum
toplam türlerini işlemek için daha güçlü bir şekilde bazı düzensiz tekliflerle veya farklı türde yerel bildirimler için ( PEP 3150 veya şu anda tartışılan teklifler kümesi -ideler). Ama şimdiye kadar olmadı.
Ayrıca, temelde elif
normal ifadeden tek gönderim tür anahtarlamaya kadar her şeyin bir karması olan Perl 6 tarzı eşleştirme için öneriler de vardır .