2017-10-12 69 views
6

Python'da bir yeni insanım. Lütfen python'un neden anahtar çantası olmadığını açıklayın? Neden Python anahtar kutusunda yok?

+2

eşleşmiyor eğer Bunlar çok yararlı değildir varsayılan dönecektir. 'Switch' yerine 'el ...' ile yapışmak daha güvenlidir. Dikkatli değilseniz, korkunç böceklere yol açarlar. – Unni

+0

Bir geçici çözüm için [Python'da Anahtar/Vaka uygulamasında herhangi bir değer var mı?] (Https://stackoverflow.com/q/5440990/6521116) –

cevap

18

Biz bir noktada kabul ama adlandırılmış sabitleri ilan etme yolunu kalmadan size çok teşekkür ederim, verimli bir atlama tablo oluşturmak için hiçbir yolu yoktur. Öyleyse bıraktığımız tek şey, elif-elif-else zincirleriyle yapabileceğimiz bir şey için sözdizimsel şeker. Tüm tartışmalar için bkz. PEP 275 ve PEP 3103.

Özetle, çeşitli tekliflerin, insanların ne tür bir dava yapacağıyla ilgili açıklamalarına dayanamadıkları ve mevcut çözümlerde (sözlük tabanlı gönderim, el-elif zincirleri, getattr- tabanlı sevkiyat veya eski moda polimorfizm aynı yönteme yönelik farklı uygulamalara sahip objelere gönderilir).

+2

'durumda 1:' oldukça sabittir, ancak * sabitler *, her yerde sihirli numaralar kullanmanız gerekir ve sihirli sayıları teşvik eden bir sözdizimi yapısı istemiyoruz. – user2357112

3

Gerçekten, bu sorunun yanıtlanması için dokümanlar içinde bir bölüm var. Aşağıya bakın:

Why isn’t there a switch or case statement in Python?

TL; DR: Mevcut alternatifleri (getattr veya dict.get yoluyla dinamik bir gönderme, if/elif zincirleri) gayet güzel bütün kullanım örneğini kapsar. i ifadeleri ise zincirleme ile yapılır aynı işi alabilirsiniz

0

rağmen Java, C++, C# destek en Onları ben switch statements hiç kullanmadım.

+2

Sorulan soruya cevap vermiyor ... – qwr

+0

Soru 1: 1'e cevap vermese de, bunun eskimiş olup olmadığına karar vermek için bir ölçüt olarak kullanılabilen güçlü bir ifadedir. Hiç bir "switch" ifadesi aradığınız davayı aldın mı? – user1767754

+0

Hiçbir zaman bir performans sorununa ihtiyacınız yoktur (noob) :( –

1
def f(x): 
    return { 
     1 : 'output for case 1', 
     2 : 'output for case 2', 
     3 : 'output for case 3' 
    }.get(x, 'default case') 

Sen Python anahtar vaka olarak kullanabilir ve durum aynı değil ise durum