Saltar al contenido principal

Declaración de caso de cambio en Python: Guía para principiantes

Explora el match-case de Python: una guía sobre su sintaxis, aplicaciones en ciencia de datos, ML, y un análisis comparativo con el switch-case tradicional.
Actualizado 16 ene 2025  · 7 min de lectura

Explora la sentencia match-case de Python, introducida en Python 3.10, y aprende cómo la concordancia de patrones estructurales aporta un nuevo nivel de elegancia y potencia a la programación en Python. Profundizaremos en su sintaxis, sus aplicaciones en la ciencia de datos y el aprendizaje automático, e incluso cómo se compara con las sentencias switch-case tradicionales de otros lenguajes. Si eres nuevo en Python, no dejes de consultar nuestra Hoja de trucos de Python para principiantes

Comprensión de las sentencias de conmutación tradicionales

Antes de Python 3.10, los desarrolladores de Python tenían que utilizar varias sentencias if-elif-else o diccionarios para simular la funcionalidad switch case. Aquí tienes un ejemplo básico utilizando if-elif-else:

day = input("Enter the day of the week: ").capitalize()

if day == "Saturday" or day == "Sunday":
    print(f"{day} is a weekend.")
elif day in ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]:
    print(f"{day} is a weekday.")
else:
    print("That's not a valid day of the week.")
Saturday is a weekend.

Introducción a Match y Case en Python 3.10

Con la introducción de match-case, Python ofrece ahora una función basada en la concordancia estructural de patrones, que te permite escribir una lógica condicional más limpia y potente.

¿Qué es la Correspondencia de Patrones Estructurales?

La concordancia de patrones estructurales, introducida en PEP 634, es una forma de concordar y desestructurar estructuras de datos basándose en su forma y contenido. Es más flexible que la concordancia de valores tradicional, ya que permite a los desarrolladores trabajar con secuencias, mapeos e incluso instancias de clases personalizadas.

La sintaxis básica de Match-Case

He aquí un ejemplo sencillo de match-case en acción. Clasifiquemos los días de la semana en fines de semana o días laborables:

# Take user input for the day of the week
day = input("Enter the day of the week: ").capitalize()

# Match the day to predefined patterns
match day:
    case "Saturday" | "Sunday":
        print(f"{day} is a weekend.")  # Match weekends
    case "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday":
        print(f"{day} is a weekday.")  # Match weekdays
    case _:
        print("That's not a valid day of the week.")  # Default case
Monday is a weekday.

Conceptos clave del ejemplo:

  1. capitalize() Método: Garantiza que la entrada del usuario sigue el formato esperado (por ejemplo, "lunes" en lugar de "lunes").
  2. Comparación de patrones con case:
    • case "Saturday" | "Sunday": Coincide con cualquiera de los patrones de la lista. El símbolo | actúa como un operador OR.
    • case _: Un caso catch-all (por defecto) para manejar las entradas no válidas.
  3. No es necesario break: A diferencia del switch-case tradicional, Python sale del bloque match tras la primera coincidencia con éxito.

Comparación de match-case frente a if-elif-else

En la tabla siguiente, puedes ver cómo se comparan ambas técnicas: 

Función if-elif-else match-case
Introducido en Disponible desde las primeras versiones de Python Introducido en Python 3.10
Syntax Utiliza las palabras clave if, elif y else Utiliza coincidencia de palabras clave y mayúsculas y minúsculas
Legibilidad Puede volverse verboso con muchas condiciones Más conciso y legible con patrones complejos
Caso por defecto Utiliza otros para un escenario por defecto Utiliza _ como comodín para el caso por defecto
Coincidencia de patrones Limitado a simples comprobaciones de estado Admite la concordancia de patrones complejos (por ejemplo, secuencias)
Rendimiento Generalmente eficaz para condiciones sencillas Potencialmente más eficaz con modelos complejos
Alcance Cada bloque requiere un ámbito explícito con sangría Los ámbitos se definen de forma natural en los bloques de casos
Casos prácticos Adecuado para tareas sencillas de toma de decisiones Ideal para la deconstrucción de estructuras de datos complejas
Flexibilidad Limitado a comparaciones escalares Puede corresponder a tipos y estructuras de datos complejos
Pausa automática Requiere pausa explícita en algunas lenguas Sale automáticamente después de emparejar un caso

Casos de uso avanzados de Match y Case en Python

Aplicaciones de la ciencia de datos

La sentencia match-case de Python puede ser muy útil en tareas de preprocesamiento de datos en ciencia de datos. El preprocesamiento suele implicar la categorización de los datos en diferentes grupos en función de criterios específicos.

Por ejemplo, en un conjunto de datos de animales, quizá quieras clasificarlos según su clase, como mamíferos, aves, reptiles, etc. He aquí un ejemplo simplificado:

animal = "Eagle"
match animal:
    case "Eagle" | "Parrot":
        print("Bird")
    case "Lion" | "Tiger":
        print("Mammal")
    case "Python" | "Crocodile":
        print("Reptile")
    case _:
        print("Unknown Class")
Bird

Este enfoque simplifica la compleja lógica if-else y hace que el código sea más legible y fácil de mantener, sobre todo cuando se trata de grandes conjuntos de datos con múltiples categorías.

Desarrollo web

En frameworks web como Django o Flask, puedes utilizar match-case para enrutar peticiones HTTP o gestionar códigos de error específicos. Aprende más sobre Python para desarrolladores con nuestro curso online. 

Ejemplo: Enrutamiento de métodos HTTP

# Example: Handling HTTP methods in a Flask-like application
method = "POST"

match method:
    case "GET":
        print("Fetching resource...")
    case "POST":
        print("Creating resource...")
    case "PUT":
        print("Updating resource...")
    case "DELETE":
        print("Deleting resource...")
    case _:
        print("Unsupported HTTP method.")

Explicación:

  • La variable method representa el tipo de petición HTTP.
  • Cada case corresponde a un posible método HTTP, simplificando lo que de otro modo serían múltiples sentencias if-elif.

Manejo de la API

Al procesar las respuestas de la API, se puede utilizar match-case para manejar diferentes códigos de estado o categorizar las respuestas JSON.

Ejemplo: Manejo de los códigos de estado

# Example: API response status code handling
status_code = 200

match status_code:
    case 200:
        print("Request succeeded.")
    case 404:
        print("Resource not found.")
    case 500:
        print("Server error. Please try again later.")
    case _:
        print("Unknown status code.")

Este enfoque facilita la interpretación y la respuesta a los resultados del API.

Concordancia de patrones simple frente a compleja

El match-case de Python no se limita a la coincidencia de valores constantes; puede manejar patrones más intrincados. He aquí una distinción:

Concordancia constante simple

Las coincidencias simples como cadenas o enteros son estupendas para una lógica limpia y legible, como se muestra en los ejemplos anteriores.

Concordancia de patrones complejos

Al trabajar con datos estructurados (por ejemplo, diccionarios, secuencias), match-case puede extraer y manipular los datos con eficacia.

Ejemplo: Coincidencia de estructuras de datos

# Example: Categorizing configurations
config = {"type": "database", "name": "PostgreSQL", "version": 13}

match config:
    case {"type": "database", "name": name, "version": version}:
        print(f"Database: {name} (Version {version})")
    case {"type": "cache", "name": name}:
        print(f"Cache system: {name}")
    case _:
        print("Unknown configuration.")

Explicación:

  • La primera case extrae name y version del diccionario, lo que facilita el trabajo con datos estructurados.
  • Esto demuestra la verdadera potencia de la concordancia estructural de patrones de Python, mucho más allá de lo que pueden conseguir las implementaciones tradicionales de cambio de caso.

Trampas comunes y buenas prácticas en el caso del cambio a Python

Consejos para depurar

Un error común al utilizar match-case en Python es olvidarse de incluir el guión bajo (_) para el caso por defecto, similar al "else" de las sentencias if-else tradicionales. Esto puede dar lugar a comportamientos inesperados si no coincide ninguno de los casos específicos. Incluye siempre un caso por defecto para manejar valores inesperados o varios.

Consideraciones sobre el rendimiento

Aunque la sentencia match-case es una herramienta potente, hay que tener en cuenta su impacto en el rendimiento del código Python, sobre todo en aplicaciones a gran escala. En escenarios con un gran número de casos, o con una concordancia de patrones compleja, el rendimiento puede verse afectado. Perfilar y probar el rendimiento de tu código en escenarios reales es crucial para comprender y mitigar cualquier posible problema de rendimiento.

La caja de cerillas Python frente a la caja de interruptores tradicional

Análisis comparativo

El match-case de Python difiere significativamente de las sentencias switch-case tradicionales de lenguajes como Java o C++. En Java, por ejemplo, la sentencia switch se limita a emparejar sólo valores escalares (como enteros y tipos enum), mientras que match-case de Python ofrece una capacidad de emparejamiento de patrones mucho más flexible, que permite emparejar tipos de datos complejos, como secuencias e instancias de clases. Esto hace que la implementación de Python sea más potente, pero también requiere una comprensión más profunda de los conceptos de concordancia de patrones.

Guía de transición

Para los programadores familiarizados con las sentencias switch-case tradicionales de lenguajes como C++ o Java, la transición al match-case de Python requiere un cambio de mentalidad, de la simple coincidencia de valores a la coincidencia de patrones.

Es importante comprender que el match-case de Python es más que un simple switch-case; es una herramienta versátil para deconstruir tipos de datos y extraer información de estructuras complejas. Practicar con distintos tipos de datos y patrones es clave para dominar su uso.

Conclusión

La introducción en Python de las sentencias match y case en la versión 3.10 proporciona una función muy esperada por los desarrolladores familiarizados con las sentencias switch case de otros lenguajes. Ofrece una forma limpia y concisa de manejar múltiples condiciones, mejorando la legibilidad y la mantenibilidad del código.

Puedes leer más sobre las Funciones de Python en nuestro tutorial completo y explorar éste y otros conceptos en nuestro curso de Python Intermedio.


Matt Crabtree's photo
Author
Matt Crabtree
LinkedIn

Escritora y editora de contenidos en el ámbito de la tecnología educativa. Comprometido con la exploración de tendencias de datos y entusiasmado con el aprendizaje de la ciencia de datos.

Preguntas frecuentes sobre el maletín Python Switch

¿Qué ocurre si dos casos coinciden con la misma entrada en una sentencia match-case?

Python evalúa los casos en el orden en que aparecen. Se ejecuta el primer caso coincidente, y el bloque coincidente sale inmediatamente.

¿Se puede utilizar match-case con clases u objetos personalizados?

Sí, match-case puede trabajar con clases personalizadas. Puedes definir patrones para hacer coincidir atributos o incluso utilizar guardas para aplicar una lógica adicional.

¿Es match-case más rápido que if-elif-else?

La diferencia de rendimiento depende de la complejidad de las condiciones. Para comprobaciones simples de valores, ambos funcionan de forma similar. Sin embargo, match-case puede ser más eficaz y legible para la concordancia de patrones complejos.

¿Qué es una guarda en una sentencia match-case?

Una guarda es una condición especificada después de case que refina aún más cuándo debe coincidir un caso. Por ejemplo:

match value:
    case x if x > 10:
        print("Value is greater than 10.")

¿Puedes utilizar match-case con versiones de Python anteriores a la 3.10?

No, match-case sólo está disponible en Python 3.10 y versiones posteriores. Para versiones anteriores, puedes utilizar if-elif-else o el mapeo de diccionario para conseguir una funcionalidad similar.

Temas

Aprende Python hoy

Certificación disponible

curso

Python intermedio

4 hr
1.2M
Mejora tus conocimientos de ciencia de datos creando visualizaciones con Matplotlib y manipulando DataFrames con pandas.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow