singledispatch en Python
Un solo nombre de función, y la implementación elegida por el tipo del primer argumento.
from functools import singledispatch
@singledispatch
def summarize(valor):
return f"{type(valor).__name__}: {valor!r}"
@summarize.register
def _(valor: int):
return f"int: {valor:+d}"
@summarize.register
def _(valor: list):
return f"lista de {len(valor)}"
@summarize.register(str)
def _(valor):
return f"texto de {len(valor)} caracteres"
for elemento in (3, "hola", [1, 2], 2.5):
print(summarize(elemento))
Cómo funciona
@singledispatchdefine el fallback.@name.registeragrega una implementación tipada.- Reemplaza una cadena de chequeos con isinstance.
Palabras clave y builtins usados aquí
defforintlenlistprintreturnstrtype
El intento, en números
- Líneas
- 25
- Caracteres a escribir
- 416
- Tokens
- 120
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 69 segundos.
Paso 2 de 3 en functools y operator; paso 39 de 53 en Python pythónico.