Palavras-chave: Python, dicionários, switch, case
Algumas pessoas reclamam de que Python não possui uma instrução switch/case, que permite executar trechos de código dependendo do valor de uma determinada variável.
Python realmente não disponibiliza essa funcionalidade, mas podemos simulá-la utilizando funções e dicionários. Para isso basta lembrar que funções e métodos em Python também são objetos. Veja:
def func1(): print "func1"
def func2(): print "func2"
def func_default(): print "default"
switch = {
1: func1,
2: func2,
}
for case in range(3):
try:
# chamamos a funcao aqui
switch[case]()
except KeyError, e:
# se nao existe, chamamos o default
func_default()
Quando executarmos este exemplo o resultado será:
default func1 func2







5 comentários
Feed de comentários deste artigo
22 março 2007 às 9:12
Eduardo Habkost
Eu gosto de usar a seguinte construção, para evitar o try/except:
switch.get(case, func_default)()
Ou, na tentativa de ser mais explícito e não confundir quem está lendo:
fn = switch.get(case, func_default)
fn()
22 março 2007 às 9:56
rbp
Po, ehabkost, era exatamente o que eu ia comentar :)
22 março 2007 às 13:59
Osvaldo Santana Neto
Certa vez em uma lista longínqua eu li o GvR dizendo que o método .get() de dict não era muito pythônico justamente porque permite ocultar a ausência de uma chave em um dicionário.
E pro meu gosto (pessoal e intransferível) usar o .get() prejudica a leitura/entendimento do que está acontecendo.
22 março 2007 às 15:06
Eduardo Habkost
No meu gosto pessoal, o try/except é que atrapalham o entendimento. :)
Uso bastante o get() porque (na minha opinião) é sucinto sem perder legibilidade.
10 junho 2007 às 18:27
Gabriel Falcão
Outro dia dei esse exemplo no meu mini-curso de python, só foi necessário antes explicar sobre funções de primeira classe, mas foi tranquilo!