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 lafecha
es una cadena de texto con formatodd/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)
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)
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)