Python de Cero a Experto / Python avanzado
Typing moderno
Python es de tipado dinámico, pero eso no significa "sin tipos": las ANOTACIONES DE TIPO modernas te dejan
declarar qué tipos espera y devuelve tu código, igual que en TypeScript (SC-03). No son obligatorias ni
frenan la ejecución, pero documentan, ayudan a tu editor a autocompletar y avisar de errores, y con
herramientas como mypy atrapan bugs antes de ejecutar. Hoy dominas el typing moderno de Python —el puente
directo con todo lo que aprendiste en TypeScript—.
Las etiquetas que documentan
Anotaciones modernas
Las anotaciones modernas usan los tipos nativos directamente: list[str] (lista de strings), dict[str, int]
(diccionario de string a int), tuple[int, int]. Van tras los dos puntos en parámetros (gastos: list[dict]),
tras la flecha para el retorno (-> int), y también en variables (resumen: dict[str, int] = {}). Recuerda:
Python NO las verifica al ejecutar (total("no soy lista") no daría error de tipo en runtime) —son ayuda para
ti, tu editor y mypy—. Pero hacen el código autodocumentado y atrapan errores mientras escribes.
Optional, uniones y más
¿Qué significa que una función devuelva 'dict | None' y verifican los tipos de Python la ejecución?
Mini-reto
Tipa un módulo de Mi Bolsillo: 1) define un TypedDict Gasto con nombre: str, valor: int,
categoria: str; 2) escribe total(gastos: list[Gasto]) -> int y mas_caro(gastos: list[Gasto]) -> Gasto | None
(devuelve None si la lista está vacía); 3) una función aplicar_descuento(valor: float, pct: float | None = None) -> float
que no descuente si pct es None. Comprueba que funcionan e imprime total.__annotations__. Nota cuánto
se parece a lo que hiciste en TypeScript.
Qué sigue
Ya tipas tu Python. La próxima lección trae una característica relativamente nueva y muy elegante: el PATTERN
MATCHING (match/case) —una forma poderosa de comparar valores y DESESTRUCTURAR datos según su forma, más
allá de un simple if—. El primo pythónico del switch con superpoderes.