Una de las características que personalmente más echo en falta al trabajar con Python es la falta de una estructura de control de flujo tipo Switch-Case. Algo que se solucionará con la salida de la versión 3.10 en octubre de 2021. La nueva versión de Python, entre otras mejoras, traerá una sintaxis tipo Switch-Case con la que se podría implementar de forma óptima estas estructuras de datos.
La nueva sintaxis match
de Python 3.10
A partir del lanzamiento de la versión 3.10 de Python se podrá implementar un control de flujo tipo Switch-Case mediante la siguiente sintaxis:
match subject: case <pattern_1>: <action_1> case <pattern_2>: <action_2> case <pattern_3>: <action_3> case _: <action_wildcard>
En la que se utiliza la palabra clave match
seguido del valor que empleado para seleccionar la acción a llevar a cabo. Posteriormente se pueden agregar tantas sentencias case
como opciones tengamos en nuestro código. Bajo las que se encuentran las acciones a llevar a cabo.
Al llegar a esta estructura de control de flujo se evaluará sin el valor indicado en subject
coincide con el indicado en la primera sentencia case
. En caso de ser iguales se ejecutará esta y se saldrá de la estructura. Esto es, no sé ejecutarán ninguna otra acción. Por otro lado, en caso de no ser iguales se evaluará el siguiente case
hasta llegar a una que coincida o llegar a una con el comodín _
.
Combinación de múltiples opciones
En el caso de que una acción se deba ejecutar para más de un valor no es necesario repetir varios case
, ya que se puede usar el operador |
para indicar más de una opción.
case 401 | 403 | 404: return "Not allowed"
Uso de variables en match
Otra opción interesante que se puede ver en la documentación de la estructura es la posibilidad de crear variables. Ya que es posible comprobar el único valor de una tupla y cargar el otro en una variable. La cual estará disponible a la hora de escribir nuestra función. Algo que se puede ver en el siguiente ejemplo incluido en la documentación.
match point: case (0, 0): print("Origin") case (0, y): print(f"Y={y}") case (x, 0): print(f"X={x}") case (x, y): print(f"X={x}, Y={y}") case _: raise ValueError("Not a point")
En este ejemplo, si los dos valores de la tupla son cero se imprimirá por pantalla la palabra Origin
. Ahora bien, en el caso de que solamente sea cero el primer valor se imprimirá por pantalla un mensaje indicando que Y
es una constante. Usando para ello una f-string. Análogamente, en el caso de que solamente sea cero el segundo se indicará que X
es una constante. En el último caso, si ningún valor de la tupla es cero se imprimirá la ecuación correspondiente. Finalmente, en el caso de que el dato no sea una tupla se indicará el error.
Imagen de Michael Gaida en Pixabay
Deja una respuesta