tacosdedatos

Cover image for PyTip: A Falta de un Switch en Python
Alan Velasco
Alan Velasco

Posted on

PyTip: A Falta de un Switch en Python

Este post será breve.

Si programas o estás aprendiendo Python y tienes experiencia con algún otro lenguaje de programación como C++, Java, o Javascript, probablemente te has dado cuenta que Python no tiene un enunciado tipo switch.

En cambio, Python sólo cuenta con la condicional if/elif/else. Esta nos puede servir para replicar la funcionalidad de un switch, al encadenar varios elif seguidos. Sin embargo, si contamos con muchos casos diferentes, puede hacer que el código se vuelva muy repetitivo.

Entonces, ¿qué se puede hacer?

Personalmente, me gusta utilizar un patrón en el cuál se utiliza una estructura de datos elemental en Python, el diccionario (dict). En específico, queremos utilizar su método get(key, default)

Consideremos el siguiente ejemplo:

Imaginemos que queremos hacer una función que captura cierto evento y la fecha en la cual se generó dicho evento. El evento es una cadena de texto cualquiera y la fecha es una cadena de texto con formato dd/mm/yyyy. Además, para capturar el evento necesitamos convertir el mes a su nombre escrito.


def registrar_evento(evento: str, fecha: str):
    dia, mes, año = fecha.split('/')
    if mes == '01':
        nombre_mes = 'enero'
    elif mes == '02':
        nombre_mes = 'febrero'
    elif mes == '03':
        nombre_mes = 'marzo'
    elif mes == '04':
        nombre_mes = 'abril'
    elif mes == '05':
        nombre_mes = 'mayo'
    elif mes == '06':
        nombre_mes = 'junio'
    elif mes == '07':
        nombre_mes = 'julio'
    elif mes == '08':
        nombre_mes = 'agosto'
    elif mes == '09':
        nombre_mes = 'septiembre'
    elif mes == '10':
        nombre_mes = 'octubre'
    elif mes == '11':
        nombre_mes = 'noviembre'
    elif mes == '12':
        nombre_mes = 'diciembre'
    else:
        nombre_mes = 'invalido'

    capturar(evento, dia, nombre_mes, año)
Enter fullscreen mode Exit fullscreen mode

Podríamos convertirlo al siguiente código, usando un diccionario:

def registrar_evento(evento: str, fecha: str):
    dia, mes, año = fecha.split('/')
    nombres_meses = {
        '01': 'enero',
        '02': 'febrero',
        '03': 'marzo',
        '04': 'abril',
        '05': 'mayo',
        '06': 'junio',
        '07': 'julio',
        '08': 'agosto',
        '09': 'septiembre',
        '10': 'octubre',
        '11': 'noviembre',
        '12': 'diciembre',
    }
    nombre_mes = nombres_meses.get(mes, 'invalido')
    capturar(evento, dia, nombre_mes, año)
Enter fullscreen mode Exit fullscreen mode

Así, podemos soportar un numero creciente de opciones sin necesidad de agregar tantas lineas de código. También, podríamos tener el diccionario como un atributo de clase en vez de estar definido en la función.

Espero les sirva este pequeño #PyTip :)
Si gustan, dejen sus preguntas en los comentarios, y si se les ocurre de que otras maneras se puede usar este patrón, también!

Discussion (0)