Manual de Python Intermedio - Proyectos Prácticos
INTRODUCCIÓN AL CURSO
Este manual está diseñado para programadores que ya dominan los fundamentos de Python y desean llevar sus
habilidades al siguiente nivel. Cubrimos conceptos intermedios y avanzados como decoradores, generadores, context
managers, programación asincrónica y desarrollo de proyectos reales. Cada sección incluye ejemplos prácticos,
ejercicios y mejores practices para escribir código profesional, eficiente y mantenible en entornos de producción.
DECORADORES: TEORÍA Y FUNDAMENTOS
Los decoradores son una de las características más poderosas y elegantes de Python. Permiten modificar o extender el
comportamiento de funciones, métodos o clases sin cambiar su código fuente. Un decorador es esencialmente una
función que recibe otra función como argumento y devuelve una nueva función con funcionalidad adicional. En Python,
los decoradores se aplican con el símbolo @ seguido del nombre del decorador justo antes de la definición de la
función objetivo.
DECORADORES: EJEMPLOS PRÁCTICOS AVANZADOS
El decorador timer mide el tiempo de ejecución de cualquier función utilizando time.perf_counter para alta precisión. El
decorador cache almacena resultados de funciones costosas en un diccionario, evitando recálculos innecesarios. El
decorador retry reintenta una función si falla hasta un número configurable de veces con espera exponencial. El
decorador validate_args verifica tipos de argumentos en tiempo de ejecución. El decorador singleton asegura que una
clase solo tenga una instancia en todo el programa.
GENERADORES: ITERACIÓN EFICIENTE
Los generadores son funciones especiales que utilizan la palabra clave yield para producir una secuencia de valores
bajo demanda. A diferencia de las funciones tradicionales que return y terminan, los generadores mantienen su estado
entre llamadas y pueden producir un número infinito de valores. Son ideales para procesar conjuntos de datos grandes
o infinitos, ya que utilizan memoria constante independientemente del tamaño de la secuencia. Ejemplos incluyen la
generación de números primos, lectura de archivos grandes línea por línea, y generadores infinitos de datos.
EXPRESIONES GENERADORAS Y PIPES
Las expresiones generadoras son una forma concisa de crear generadores, similares a las list comprehensions pero
con paréntesis en lugar de corchetes. Se pueden encadenar para crear pipelines de procesamiento de datos eficientes.
Por ejemplo, se puede leer un archivo grande, filtrar líneas, transformar datos y escribir resultados sin cargar todo en
memoria. Esta técnica es fundamental para procesamiento de logs, datos de sensores, y archivos CSV con millones de
registros donde la memoria es limitada.
CONTEXT MANAGERS: GESTIÓN DE RECURSOS
Los context managers, implementados con la palabra clave with, proporcionan una forma elegante de gestionar
recursos como archivos, conexiones de red, bloqueos y transacciones de base de datos. La forma más simple de crear
un context manager es usando el decorador contextmanager del módulo contextlib. Alternativamente, se puede
implementar una clase con los métodos __enter__ y __exit__. Los context managers aseguran que los recursos se
liberen correctamente incluso si ocurre una excepción.
PROGRAMACIÓN ASINCRÓNICA: ASYNC Y AWAIT
La programación asincrónica con async y await ha revolucionado la forma en que manejamos operaciones de
entrada/salida en Python. Permite escribir código concurrente que puede manejar miles de conexiones simultáneas sin
la complejidad de los hilos tradicionales. La sintaxis async def define una corrutina, await suspende su ejecución hasta
que la operación awaitable complete, y [Link] ejecuta múltiples corrutinas en paralelo de manera eficiente.
ASYNCIO: BUCLE DE EVENTOS Y TAREAS
El módulo asyncio proporciona el bucle de eventos, las corrutinas y los mecanismos de sincronización para
programación asincrónica. [Link] inicia el bucle de eventos y ejecuta la corrutina principal. asyncio.create_task
permite lanzar tareas en segundo plano que se ejecutan concurrentemente. [Link] ejecuta múltiples corrutinas
en paralelo y espera a que todas completen. asyncio.wait_for establece un timeout para una operación. Semáforos
asincrónicos controlan el acceso a recursos limitados.
CLIENTES HTTP ASINCRÓNICOS CON AIOHTTP
aiohttp es la biblioteca más popular para realizar peticiones HTTP asincrónicas en Python. Permite enviar cientos de
peticiones simultáneas usando una sola conexión TCP, con sesiones reutilizables, timeouts configurables y manejo de
errores. Las sesiones de aiohttp soportan cookies automáticas, pooling de conexiones, y compresión. Combinado con
async/await, se pueden construir scraper y clientes API extremadamente eficientes que consumen mínimos recursos
del sistema.
PROYECTO 1: WEB SCRAPER ASINCRÓNICO
Construiremos un web scraper utilizando aiohttp para las peticiones y BeautifulSoup para parsear HTML. El scraper
extraerá títulos, precios y descripciones de tiendas online de manera concurrente. Implementaremos control de tasa
con [Link] para limitar peticiones simultáneas y evitar sobrecargar los servidores. Incluiremos reintentos
automáticos con backoff exponencial para manejar errores temporales de red y respuestas 5xx.
PROYECTO 2: API REST CON FASTAPI
Crearemos una API REST completa utilizando FastAPI, el framework más moderno y rápido de Python. La API incluirá
endpoints CRUD para un sistema de gestión de tareas, autenticación mediante JSON Web Tokens, validación de datos
con Pydantic, y documentación automática generada con Swagger y ReDoc. También implementaremos pruebas
automatizadas con pytest y contenedorización con Docker para facilitar el despliegue en producción.
PRUEBAS Y CALIDAD DE CÓDIGO
Las pruebas automatizadas son fundamentales en el desarrollo profesional. Cubriremos pruebas unitarias con pytest,
pruebas de integración que verifican la interacción entre componentes, mocking de dependencias externas con
[Link], y pruebas de rendimiento con locust. También exploraremos herramientas de calidad como ruff para
linting, mypy para tipado estático, y black para formateo automático. La integración continua con GitHub Actions
automatizará estas verificaciones.
PATRONES DE DISEÑO EN PYTHON
Los patrones de diseño ofrecen soluciones probadas a problemas comunes. El patrón Singleton asegura una única
instancia usando metaclasses. El patrón Factory crea objetos sin especificar la clase exacta. El patrón Observer
establece relaciones uno-a-muchos entre objetos. El patrón Strategy permite intercambiar algoritmos dinámicamente.
Python permite implementar estos patrones de manera más concisa gracias a características como decoradores,
closures y funciones de primera clase.
MANEJO AVANZADO DE ARCHIVOS Y DATOS
Exploraremos técnicas avanzadas para manejo de archivos incluyendo lectura/escritura de archivos CSV grandes con
pandas en chunks, procesamiento de archivos JSON anidados, serialización con pickle y shelve, y trabajo con archivos
binarios. También cubriremos compresión con gzip y zip, cifrado básico con cryptography, y procesamiento de
imágenes con Pillow para automatizar tareas de manipulación de archivos en lotes.