curso
Declaración de caso de cambio en Python: Guía para principiantes
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:
capitalize()
Método: Garantiza que la entrada del usuario sigue el formato esperado (por ejemplo, "lunes" en lugar de "lunes").- 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.
- No es necesario
break
: A diferencia del switch-case tradicional, Python sale del bloquematch
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 sentenciasif-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
extraename
yversion
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.

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.
Aprende Python hoy
programa
Programación en Python
curso