Noticias

Novedades en Python 3.10: Switch-Case

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

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

Los récords con asterisco, o la épica del titular sin contexto – El bestiario de los indicadores económicos absurdos (parte 8 y final)

Y llegamos al final de una serie que había programado para ser de tres entradas.…

1 día ago

PSI: Cómo Saber Cuándo tu Modelo de Credit Scoring se ha Degradado

Un modelo de credit scoring no es un artefacto estático. Se construye en un momento…

3 días ago

Los indicadores que se autocumplen, o cuando medir es modificar – El bestiario de los indicadores económicos absurdos (parte 7)

En las seis entregas anteriores hemos paseado por casi todos los géneros del disparate económico:…

1 semana ago

Customer Lifetime Value: la fórmula clásica que todo analista debería dominar

El Customer Lifetime Value (CLV) es, probablemente, la métrica más importante que puede calcular una…

1 semana ago

Analytics Lane lanza la versión 1.4 del laboratorio con nuevas herramientas de conversión y modelos avanzados de CLV

Seguimos ampliando el laboratorio de Analytics Lane con el lanzamiento de la versión 1.4, que…

2 semanas ago

This website uses cookies.