Sebbene Python non abbia istruzioni switch, è possibile emularle con dizionari. Ad esempio, se si desidera un passaggio come questo:
switch (a):
case 1:
runThisCode()
break
case 2:
runThisOtherCode()
break
case 3:
runThisOtherOtherCode()
break
È possibile utilizzare le if
istruzioni oppure è possibile utilizzare questo:
exec{1:"runThisCode()",2:"runThisOtherCode()",3:"runThisOtherOtherCode()"}[a]
o questo:
{1:runThisCode,2:runThisOtherCode,3:runThisOtherOtherCode}[a]()
che è meglio se tutti i percorsi di codice sono funzioni con gli stessi parametri.
Per supportare un valore predefinito, procedere come segue:
exec{1:"runThisCode()"}.get(a,"defaultCode()")
(o questo:)
{1:runThisCode}.get(a,defaultCode)()
Un altro vantaggio di questo è che se si hanno ridondanze, è possibile aggiungerle solo dopo la fine del dizionario:
exec{'key1':'code','key2':'code'}[key]+';codeThatWillAlwaysExecute'
E se volessi semplicemente utilizzare un interruttore per restituire un valore:
def getValue(key):
if key=='blah':return 1
if key=='foo':return 2
if key=='bar':return 3
return 4
Potresti semplicemente fare questo:
getValue=lambda key:{'blah':1,'foo':2,'bar',3}.get(key,4)