Curso gratuito de Python. Regístrate para hacer un seguimiento de tu progreso →

Python: Operador Match

Muchos lenguajes, además de la estructura condicional if, incluyen switch. Con la versión 3.10 de Python, se agregó el operador match con funcionalidad similar. En esta lección, aprenderemos sobre este operador.

El operador match es una versión especializada de if creada para situaciones específicas. Por ejemplo, se debe utilizar cuando hay una cadena de if else con comprobaciones de igualdad:

if status == 'processing':
    # Hacer algo
elif status == 'paid':
    # Hacer algo más
elif status == 'new':
    # Hacer algo diferente
else:
    # Hacer algo más

Esta comprobación compuesta tiene una característica distintiva: cada rama es una comprobación del valor de la variable status. El operador match permite escribir este código de forma más corta y expresiva:

match status:
    case 'processing':  # status == 'processing'
        # Hacer algo
    case 'paid':  # status == 'paid'
        # Hacer algo más
    case 'new':  # status == 'new'
        # Hacer algo diferente
    case _:  # else
        # Hacer algo más

En términos de cantidad de elementos, match es una construcción compleja. Está compuesta por los siguientes elementos:

  • Una descripción externa que incluye la palabra clave match. Esta es la variable cuyos valores determinarán el comportamiento del match.
  • Las construcciones case, dentro de las cuales se describe el comportamiento para diferentes valores de la variable considerada. Cada case corresponde a un if en el ejemplo anterior. Además, case _ es una situación especial que corresponde a la rama else en las estructuras condicionales. Al igual que else, no es obligatorio especificar case _.

Dentro de match, solo se permite la sintaxis mostrada anteriormente. En otras palabras, se pueden utilizar case. Sin embargo, dentro de cada case, la situación es diferente. Aquí se puede ejecutar cualquier código arbitrario:

match count:
    case 1:
        # Hacer algo útil
    case 2:
        # Hacer algo útil
    case _:
        # Hacer algo

A veces, el resultado obtenido dentro de case es el final de la ejecución de la función que contiene el match. En ese caso, es necesario devolverlo de alguna manera. Hay dos formas de resolver este problema:

Primera forma: crear una variable antes del match, asignarle un valor dentro de case y luego devolver el valor de esa variable al final:

def count_items(count):
    # Declarar una variable
    result = ''

    # Llenar el espacio
    match count:
        case 1:
            result = 'one'
        case 2:
            result = 'two'
        case _:
            result = None

    # Devolver el valor
    return result

La segunda forma es más simple y corta. En lugar de crear una variable al trabajar con case, se puede hacer un retorno normal de la función:

def count_items(count):
    match count:
        case 1:
            return 'one'
        case 2:
            return 'two'
        case _:
            return None

Aunque el operador match se encuentra en el código, técnicamente siempre se puede prescindir de él. La ventaja clave de su uso es que expresa mejor la intención del programador cuando se necesitan comprobar valores específicos de una variable. Aunque el código es un poco más largo físicamente, es más fácil de leer en comparación con los bloques elif.

Tarea

Implementa la función get_number_explanation(), que recibe un número como entrada y devuelve una explicación para ese número. Si no hay una explicación para el número, se devuelve just a number. Las explicaciones solamente existen para los siguientes números:

  • 666 - devil number
  • 42 - answer for everything
  • 7 - prime number

Ejemplos de llamadas a la función:

get_number_explanation(8)  # just a number
get_number_explanation(666)  # devil number
get_number_explanation(42)  # answer for everything
get_number_explanation(7)  # prime number
¿El ejercicio no pasa la prueba, qué debo hacer? 😶

Si te quedaste atascado, es el momento perfecto para hacer una pregunta en las "Discusiones".
* Asegúrate de incluir la salida de las pruebas. Sin ella, es casi imposible entender qué está mal, incluso si muestras tu código. Los programadores tienen dificultades para ejecutar el código en su mente, pero casi siempre es posible entender a dónde mirar a partir del error que recibiste.

Mi código funciona en mi entorno, pero no aquí 🤨

Las pruebas están diseñadas de manera que verifican la solución de diferentes maneras y con diferentes datos. A menudo, una solución funciona con ciertos datos de entrada pero no con otros. Para entender este punto, revisa la pestaña "Pruebas" y presta atención a los mensajes de error, que suelen contener pistas.

Mi código es diferente a la solución del profesor 🤔

Esto es normal 🙆. En programación, una tarea puede tener muchas soluciones diferentes. Si tu código pasa la prueba, cumple con los requisitos de la tarea.

En raras ocasiones, la solución puede estar ajustada para pasar las pruebas, pero esto suele ser evidente.

Leí la lección, pero no entendí nada 🙄

Crear materiales de aprendizaje comprensibles para todos es bastante difícil. Hacemos nuestro mejor esfuerzo, pero siempre hay margen para mejorar. Si encuentras material que no entiendes, describe el problema en las "Discusiones". Es ideal si puedes formular los aspectos que no entiendes en forma de preguntas. Por lo general, necesitamos unos días para hacer mejoras.

Por cierto, tú también puedes contribuir a mejorar los cursos: en la parte inferior hay un enlace al código fuente de las lecciones, que se puede modificar directamente en el navegador.

Consejos útiles


¿Encontraste un error? ¿Quieres añadir algo? Las solicitudes de extracción son bienvenidas. https://codica.la/errores
Si te encuentras con dificultades y no sabes qué hacer, pregunta en nuestra gran y amigable comunidad