Mejores Prácticas para Iteradores y Decoradores
Directrices para la iteración perezosa, la higiene de decoradores y las tuberías componibles: los patrones que mantienen los servicios de Python seguros en memoria y depurables.
Busca en todas las páginas de la documentación
Directrices para la iteración perezosa, la higiene de decoradores y las tuberías componibles: los patrones que mantienen los servicios de Python seguros en memoria y depurables.
lambda en bucles y @wraps faltantes.itertools para chain, islice, groupby, product. Probados en batalla y perezosos.groupby cuando agrupes por clave. El requisito de clave consecutiva es fácil de olvidar.tee o list().try/finally o @contextmanager dentro de generadores que manejan archivos/sockets. Los consumidores pueden detenerse prematuramente..close() en pruebas cuando la limpieza sea importante. Activa GeneratorExit en el yield.yield from en lugar de bucles for/yield manuales. Delegación y propagación de retorno más claras.islice o condiciones de break. count() y cycle() nunca se detienen solos.@functools.wraps en funciones envoltorio. Conserva __name__, la documentación y las anotaciones.classmethod/staticmethod.def retry(n):). Evita la configuración mutable global en decoradores.from.lru_cache). Llama a cache_clear cuando las entradas cambien externamente.maxsize en lru_cache para espacios de claves ilimitados. Previene fugas de memoria.singledispatch para extensión abierta por tipo. No largas cadenas de isinstance en un solo módulo.partial para vincular configuración, no para ocultar parámetros requeridos. Mantén las firmas públicas legibles.with para archivos, bloqueos, transacciones de bases de datos y configuración temporal. No abras sin una ruta de cierre.ExitStack cuando el número de contextos se determine en tiempo de ejecución. Listas de archivos dinámicas, pilas de plugins.False de __exit__ a menos que estés suprimiendo deliberadamente. Los fallos ocultos corrompen el estado.@contextmanager para configuración/desmontaje simples de menos de 15 líneas. Basado en clases para objetos reutilizables.with.Generador cuando el flujo es grande o de pasada única. Lista cuando necesites len, reutilización o indexación.
Divide cuando cada etapa tenga una responsabilidad digna de un nombre; evita anidamientos anónimos de 10 líneas.
Documenta el orden de apilamiento y la preservación de metadatos; los consumidores confían en __name__ en los logs.
Caché por función; los argumentos del método incluyen self. Considera una función fuera de la clase o __hash__ en self inmutable.
Solo cuando debas bifurcar una pasada única; la memoria crece con la divergencia.
Ver sección de asyncio; usa async with para adquisición, async for para consumo.
list(pipeline(data)) en pruebas; verifica la limpieza intermedia con mocks en close.
Bien para plegados raros; un bucle explícito suele ser más claro para equipos nuevos en el estilo funcional.
Decorador para registro/metadatos; herencia para implementación de comportamiento compartido.
Materializar listas intermedias gigantes entre etapas de map/filter; mantente perezoso hasta el límite.
genexpVersiones de Stack: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, y uv 0.6+.
Revisado por Chris St. John·Última actualización: 19 jul 2026