martes, 9 de marzo de 2021

Pattern matching en Python.


Antes de empezar, si no sabes que es pattern matching, lee este post : https://emanuelpeg.blogspot.com/2014/04/pattern-matching.html

El PEP 634 nos muestra como va a ser el pattern matching en Python 3.10. Veamos el ejemplo que es super claro : 


match subject:

    case <pattern_1>:

        <action_1>

    case <pattern_2>:

        <action_2>

    case <pattern_3>:

        <action_3>

    case _:

        <action_wildcard>


Muy parecido a scala pero en vez de => usa los 2 puntos. 

Para que quede aun más claro veamos un ejemplo de uso: 


def http_error(status):

    match status:

        case 400:

            return "Bad request"

        case 404:

            return "Not found"

        case 418:

            return "I'm a teapot"

        case _:

            return "Something's wrong with the Internet"


y también se va a poder enumerar opciones con el |  : 


case 401 | 403 | 404:

    return "Not allowed"


A la vez, igual que en scala se va poder hacer matching con el valor y estructura de los objetos : 


# point is an (x, y) tuple

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")


Y como este matching más complejo podemos utilizar mejor el wildcard, etc... pero este post no trata de hablar de toda la potencia de esta nueva característica sino de trasnmitir la noticia. 


Dejo link : 

https://docs.python.org/3.10/whatsnew/3.10.html#pep-634-structural-pattern-matching

No hay comentarios.:

Publicar un comentario