Manual de Python Intermedio
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 que son esenciales para
escribir código profesional, eficiente y mantenible en entornos de producción.
Los decoradores son una de las características más poderosas de Python. Permiten modificar o extender el
comportamiento de funciones y clases sin cambiar su código fuente. Un decorador es esencialmente una
función que toma otra función como argumento y devuelve una nueva función con funcionalidad adicional.
Ejemplos prácticos de decoradores incluyen el decorador timer para medir tiempo de ejecución, el decorador
cache para memorizar resultados de funciones costosas, y el decorador require_auth para verificar permisos
en aplicaciones web. La biblioteca estándar de Python incluye decoradores útiles como property,
staticmethod y classmethod.
Los generadores son funciones especiales que utilizan la palabra clave yield para producir una secuencia de
valores bajo demanda, en lugar de calcularlos todos de una vez. Esto los hace ideales para trabajar con
conjuntos de datos grandes o infinitos, ya que utilizan memoria constante independientemente del tamaño
de la secuencia.
Un generador se define como una función normal pero usando yield en lugar de return. Cada vez que se
llama a next sobre el generador, la función se reanuda desde donde se quedó, manteniendo su estado entre
llamadas. Esto permite crear secuencias perezosas que solo generan valores cuando son necesarios.
Los context managers, implementados con la palabra clave with, proporcionan una forma elegante de
gestionar recursos como archivos, conexiones de red y bloqueos. La forma más simple de crear un context
manager es usando el módulo contextlib con el decorador contextmanager.
La programación asincrónica con async y await ha revolucionado la forma en que manejamos operaciones
de entrada y salida en Python. Permite escribir código concurrente que puede manejar miles de conexiones
simultáneas sin la complejidad de los hilos tradicionales.
El módulo asyncio proporciona el bucle de eventos, las corrutinas y los mecanismos de sincronización
necesarios para la programación asincrónica. La función [Link] permite ejecutar múltiples corrutinas
en paralelo, mientras que asyncio.create_task permite lanzar tareas en segundo plano.
Para el primer proyecto práctico, construiremos un web scraper utilizando aiohttp para las peticiones
asincrónicas y BeautifulSoup para el parseo de HTML. El scraper deberá extraer títulos, precios y
descripciones de tiendas online, implementando rate limiting para respetar los servidores y reintentos
automáticos para manejar fallos temporales.
El segundo proyecto consiste en crear una API REST completa utilizando FastAPI, uno de los frameworks
web más rápidos y modernos de Python. La API incluirá endpoints CRUD completos, autenticación mediante
JSON Web Tokens, documentación automática generada con Swagger, pruebas exhaustivas con pytest y
contenedorización con Docker para facilitar el despliegue.
Las pruebas son fundamentales en el desarrollo profesional. Cubriremos pruebas unitarias con pytest,
pruebas de integración, mocking de dependencias externas, y pruebas de rendimiento para asegurar que
nuestro código no solo funciona correctamente sino que también es eficiente bajo carga.
El control de versiones con Git es indispensable en cualquier proyecto profesional. Cubriremos estrategias
de branching como Git Flow y GitHub Flow, resolución de conflictos, rebase interactivo para mantener un
historial limpio, y hooks de pre-commit para automatizar la verificación de calidad del código antes de cada
confirmación.
Finalmente, exploraremos patrones de diseño comunes en Python como Singleton, Factory, Observer y
Strategy, y cómo implementarlos utilizando las características únicas del lenguaje como decoradores,
metaclasses y properties para crear código elegante y mantenible.