Pythonic “Switch … Case”

Python pode emular a switch...caseestrutura de controle de fluxo encontrada em muitas linguagens. Tudo que você precisa fazer é colocar seus valores esperados como chaves para um dicionário.

def starts_with_s():
return ' '.join(['No','soup','for','you!']).upper()

words
= {
'a': lambda: 'Apple',
'b': lambda: 'Blueberry',
'c': lambda: 'Cookie',
's': starts_with_s
}

print words['a']()
>>> 'Apple'
print words['b']()
>>> 'Blueberry'
print words['c']()
>>> 'Cookie'
print words['s']()
>>> 'NO SOUP FOR YOU!'

Os lambdas são necessários apenas se você estiver fazendo mais do que simplesmente retornar uma string – como são funções definidas, são passados ​​de volta e executados exatamente como a função nomeada starts_with_s().

Os valores padrão são mais bem tratados como uma exceção:

try:
print words['x']
except KeyError:
print 'I don't know anything about that...'
>>> 'I don't know anything about that...'

Finalmente, esta estrutura é capaz de usar qualquer objeto imutável como chave. Isso pode ser útil:

from random import choice

domain
= 'rps'

winner
= {
('r','r'): 'Tied. Rock on!',
('p','p'): 'Draw. Get it? Draw!? :)',
('s','s'): 'Tied. Cut that out!',
('r','p'): 'You lose. Paper covers rock',
('r','s'): 'You win. Rock breaks scissors',
('p','r'): 'You win. Paper covers rock',
('p','s'): 'You lose. Scissors cut paper',
('s','r'): 'You loss. Rock breaks scissors.',
('s','p'): 'You win. Scissors cut paper'
}

for idx in range(10):
user
, computer = choice(domain), choice(domain)
print 'Trial %s: %s' % (idx+1, winner[(user, computer)])

>>> Trial 1: You lose. Paper covers rock
>>> Trial 2: You win. Scissors cut paper
>>> Trial 3: You win. Scissors cut paper
>>> Trial 4: Tied. Cut that out!
>>> Trial 5: You win. Paper covers rock
>>> Trial 6: You win. Scissors cut paper
>>> Trial 7: You win. Paper covers rock
>>> Trial 8: You lose. Scissors cut paper
>>> Trial 9: You loss. Rock breaks scissors.
>>> Trial 10: Tied. Cut that out!

Vamos ver você fazer isso em PHP!