Python: Fazer switch/case com dicionários

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
This entry was posted in Python. Bookmark the permalink.

5 Responses to Python: Fazer switch/case com dicionários

  1. 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()

  2. rbp says:

    Po, ehabkost, era exatamente o que eu ia comentar :)

  3. 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.

  4. No meu gosto pessoal, o try/except é que atrapalham o entendimento. :)

    Uso bastante o get() porque (na minha opinião) é sucinto sem perder legibilidade.

  5. 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!

Leave a Reply

Your email address will not be published. Required fields are marked *