¿Qué es Structural Pattern Matching de Python y por qué todos hablan de él?

¿De qué se trata?

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"

Más madera

match my_list: case []: print("Lista vacía") case [x]: print(f"Lista de un elemento: {x}") case [1, 2] | [2, 1] | [1, 3] | [3, 1]: print(f"Estas combinaciones me interesan mucho") case [x, y]: print(f"Lista con dos elementos: {x} y {y}") case [x, y, z]: print(f"Lista con tres elementos: {x}, {y} y {z}") case [0, 1, 1, 2, *tail]: print(f"Parece que es la serie de Fibonacci...") case ["end", "of", "game"]: print(f"Se acabó el juego...") case [x, y, *tail]: print(f"Lista con más de tres elementos. Los dos primeros son: {x} y {y}")

Con diccionarios también

match customer_data: case {"password": password, **personal_data}: customer.set_password(password=password) customer.update_personal_data(personal_data) case {"gdpr_check": True, "customer_id": cid}: apply_gdpr_policies(cid) case dict(x) if not x: raise Exception("no data to process")

Incluso con nuestros propios objetos

match event.get(): case Click(position=(x, y)): handle_click_at(x, y) case KeyPress(key_name="Q") | Quit(): game.quit() case KeyPress(key_name="up arrow"): game.go_north() ... case KeyPress(): pass # Ignore other keystrokes case other_event: raise ValueError(f"Unrecognized event: {other_event}")
from dataclasses import dataclass @dataclass class Pair: first: int second: int pair = Pair(10, 20) match pair: case Pair(0, x): print("Case #1") case Pair(x, y) if x == y: print("Case #2") case Pair(first=x, second=20): print("Case #3") case Pair as p: print("Case #4")

Conclusión

--

--

Tecnología con propósito para mejorar el mundo. ¡Conócenos! ➡️ https://www.paradigmadigital.com/

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store