En Python 3.10 se introdujo el mecanismo de coincidencia de patrones estructurales (structural pattern matching), el operador match-case. Históricamente, en Python, las condiciones complejas se implementaban mediante cadenas if/elif/else, lo que resultaba incómodo para analizar estructuras anidadas (por ejemplo, diccionarios, tuplas anidadas).
Problema — las comprobaciones complejas anidadas se vuelven poco legibles y difíciles de mantener. El enfoque basado en match-case permite describir de manera concisa las comprobaciones con la descomposición de variables y condiciones guard.
Solución — utilizar la sintaxis match-case, que permite coincidir la estructura de un objeto (diccionarios, tuplas, listas) con un patrón dado y extraer datos.
Ejemplo de código:
point = (1, 2) match point: case (0, 0): print('Origen') case (0, y): print(f'Y={y}') case (x, 0): print(f'X={x}') case (x, y): print(f'X={x}, Y={y}')
Características clave:
¿Se puede usar match-case para condiciones if-elif-else de valores individuales?
Sí, sin embargo, la fuerza de match-case radica precisamente en su estructura. Para condiciones discretas simples, es similar al switch-case en lenguajes como C.
¿Se puede usar match-case con objetos inmutables (por ejemplo, str)?
Sí, match-case funciona con cualquier objeto que se pueda comparar con un patrón, incluyendo cadenas y números.
Ejemplo de código:
color = 'red' match color: case 'red': print('Es rojo') case 'blue': print('Es azul') case _: print('Color desconocido')
¿Qué error puede ocurrir al hacer coincidencia de objetos con el mismo nombre de variable en el contexto exterior?
La coincidencia de patrones asigna variables localmente dentro de case, independientemente del contexto externo. Esto puede llevar a confusión si el nombre de la variable ya se utiliza afuera.
Usan match-case para un gran if-elif-else con constantes simples.
Pros:
Contras:
Se procesa un flujo de estructuras JSON anidadas de una API, donde diferentes casos requieren diferentes extracciones de datos de varios niveles de la estructura.
Pros:
Contras: