Domina el tipado en Python con ejemplos prácticos: aprende a anotar parámetros, definir el retorno con la flecha -> y tipar listas, diccionarios, tuplas y listas anidadas. Verás cómo el editor usa los tipos para autocompletar y alertar errores, cuándo usar any sin abusar y cómo MyPy ayuda a mantener el código limpio a medida que el proyecto crece.
¿Cómo tipar funciones en Python con parámetros y retorno?
Anotar funciones hace explícito qué datos reciben y devuelven. Se usan dos puntos para parámetros y el operador flecha para el retorno. Así, el editor identifica tipos y ofrece autocompletado.
# función tipada: parámetros y retornodefsuma_clara(a:int, b:int)->int:return a + b
Parámetros tipados con ":" y su tipo: int, str, etc.
Retorno con "->" y el tipo esperado.
El editor muestra tipos y autocompleta según las anotaciones.
¿Qué ventaja práctica ofrece el tipado en proyectos grandes?
Entiendes qué enviar a cada función sin abrir su archivo.
Reduces errores al integrar módulos en muchos archivos.
Documentas el código de forma viva y verificable.
¿Cómo tipar listas, diccionarios y estructuras anidadas?
Para colecciones, usa genéricos con corchetes. Con list indicas que es una lista; con tipos internos, restringes su contenido. Esto habilita autocompletado correcto y validaciones de incompatibilidad.
# lista de artículos: cada elemento es un diccionario con datos como titlearticles:list[dict]=[{"title":"Primer post"},{"title":"Segundo post"},]# lista de listas restringida a stringsmatriz:list[list[str]]=[["artículos","otro"],["más","items"],]
Usa list[...] para tipar listas con su contenido.
El editor solo sugiere métodos válidos de lista tras el punto.
Anida tipos: list[list[str]] para listas de listas de strings.
Tipos básicos disponibles: int, str, list, dict y tuple.
¿Qué ocurre si agregas un tipo incompatible?
El editor marca el item como incompatible con el tipo declarado.
Evitas errores al momento de construir o ejecutar.
Corriges de inmediato antes de que el fallo se propague.
¿Cuándo usar any y cómo apoyarte en mypy?
Cuando migras código sin tipado, any permite avanzar mientras decides los tipos reales. Úsalo con moderación para no perder los beneficios del tipado.
# uso controlado de anyfrom typing importanyarticulos3:list[any]=["texto",123,{"title":"válido"},]
any acepta cualquier tipo de dato.
Útil al mover un proyecto sin typing a código tipado.
No sobreabusar: mejor sin tipado que llenarlo de any en todos los archivos.
Instala la extensión MyPy para detectar errores y empezar a limpiar el código mientras construyes el proyecto.
¿Tienes dudas sobre cómo tipar una estructura específica o una función compleja? Cuéntalo en los comentarios y comparte tu ejemplo para recibir sugerencias.
El editor solo sugiere métodos válidos según el tipo.
⚠️ 4️⃣ Qué pasa con tipos incompatibles
🚫 Si insertas un valor que no coincide con el tipo declarado:
⚡ El editor marca el error.
🛠️ Puedes corregir antes de ejecutar.
🧯 Evitas errores en cascada durante el desarrollo.
✅ Tipado = detección temprana de errores.
🔐 5️⃣ Uso de Any + MyPy
🧩 Cuándo usar Any
Durante migraciones de código sin tipado.
Cuando no conoces aún el tipo exacto.
⚠️ No abuses de él: reduce la utilidad del tipado.
Ejemplo:
from typing import Any
articulos3: list[Any] = [
"texto",
123,
{"title": "válido"},
]
Sobre el reto, por ejemplo, asi quedaria la función fetch_news:
deffetch_news(api_name:str,*args: Any,**kwargs: Any)->dict[str, Any]|str:"""Funcion flexible para conectar con la API de noticias""" base_config:dict[str,int]={"timeout":30,"retries":3,} config:dict[str, Any]={**base_config,**kwargs,} api_clients:dict[str, Any]={"newsapi": newsapi_client,"guardian": guardian_client,} client: Any = api_clients[api_name]return client(*args,**config)
Muy buena solución!
No te adelantes con el typing! Veremos Any en el futuro!
Esto es especial en muchos aspectos, yo me los he llegado a encontrar con mucha frecuencia en FastApi que usa los tipados para validar con pydantic de fondo 👀, a priori parece que no pero es demasiado útil.
Pydantic usa MUY bien los tipos, que bueno que los hayas aprendido!