Python 3.10'da yapılandırılmış desen eşleştirme mekanizması (structural pattern matching) ve match-case operatörü tanıtılmıştır. Tarihsel olarak, Python'da karmaşık koşullar if/elif/else zinciri ile gerçekleştirilmiştir, bu da iç içe yapıların (örneğin, sözlükler, iç içe demetler) analizinde zorluğa neden olmuştur.
Sorun — karmaşık iç içe kontroller okunabilirliğini azaltır ve bakımını zorlaştırır. Match-case tabanlı yaklaşım, değişkenlerin açılması ve guard koşulları ile kontrolü özlü bir şekilde tanımlamayı mümkün kılar.
Çözüm — match-case sözdizimini kullanmak, nesnenin yapısını (sözlükler, demetler, listeler) belirli bir desenle eşleştirmeyi ve verileri çıkarmayı mümkün kılar.
Kod örneği:
point = (1, 2) match point: case (0, 0): print('Köken') case (0, y): print(f'Y={y}') case (x, 0): print(f'X={x}') case (x, y): print(f'X={x}, Y={y}')
Ana özellikler:
Tekil değerlerle basit if-elif-else koşulları için match-case kullanmak mümkün mü?
Evet, ancak match-case'in gücü yapılandırmış olmasındadır. Basit ayrık koşullar için C gibi dillerdeki switch-case'e benzer.
Match-case ile değiştirilemez nesnelerle (örneğin, str) kullanmak mümkün mü?
Evet, match-case herhangi bir nesne ile çalışır, bunlar desene karşılaştırılabilir, metinler ve sayılar da dahil.
Kod örneği:
color = 'red' match color: case 'red': print('Bu kırmızı') case 'blue': print('Bu mavi') case _: print('Bilinmeyen renk')
Aynı isimli değişkenler dış alanında eşleme yaparken ne tür bir hata olabilir?
Desen eşleştirme, değişkenleri case içinde lokal olarak atar, dış bağlamdan bağımsızdır. Bu, değişken isminin dışarıda zaten kullanılması durumunda kafa karışıklığına neden olabilir.
Match-case, basit sabitlerle büyük bir if-elif-else yapmak için kullanılır.
Artılar:
Eksiler:
Farklı durumların farklı veri çıkarımlarını gerektirdiği API’den gelen iç içe JSON yapılarının akışını işlemek.
Artılar:
Eksiler: