typestar

Coincidencia estructural de patrones, a fondo en Python

Patrones de clase, guardas, y capturar el resto de un mapeo.

from dataclasses import dataclass


@dataclass
class Clic:
    x: int
    y: int


def describir(evento):
    match evento:
        case {"kind": "key", "value": str(tecla)} if len(tecla) == 1:
            return f"tecla {tecla}"
        case {"kind": "key", **resto}:
            return f"evento de tecla raro {sorted(resto)}"
        case Clic(x=0, y=0):
            return "clic en el origen"
        case Clic(x=x, y=y):
            return f"clic en {x},{y}"
        case [primero, *otros]:
            return f"lote de {1 + len(otros)} que empieza con {primero!r}"
        case _:
            return "desconocido"


for evento in [{"kind": "key", "value": "a"}, Clic(0, 0), Clic(3, 4),
              ["a", "b"], 7]:
    print(describir(evento))

Cómo funciona

  1. Un patrón de clase coincide tipo y atributos a la vez.
  2. {**resto} captura las claves que no nombraste.
  3. | combina alternativas en un mismo case.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
28
Caracteres a escribir
599
Tokens
212
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 121 segundos.

Escribe este fragmento

Paso 3 de 3 en Datos y enums; paso 47 de 53 en Python pythónico.

← Anterior Siguiente →