Esto es más bien lo inverso de ¿Para qué se pueden usar las funciones del generador de Python? : los generadores de Python, las expresiones del generador y el itertoolsmódulo son algunas de mis características favoritas de Python en estos días. Son especialmente útiles al configurar cadenas de operaciones para realizar en una gran cantidad de datos; a menudo los uso cuando proceso archivos DSV.
Entonces, ¿cuándo no es un buen momento para usar un generador, o una expresión generadora, o una itertoolsfunción?
- Cuando debería preferir
zip()másitertools.izip(), o range()terminadoxrange(), o[x for x in foo]terminado(x for x in foo)?
Obviamente, eventualmente necesitamos "resolver" un generador en datos reales, generalmente creando una lista o iterando sobre ella con un ciclo que no sea generador. A veces solo necesitamos saber la longitud. Esto no es lo que estoy preguntando.
Usamos generadores para no asignar nuevas listas a la memoria para datos provisionales. Esto tiene sentido especialmente para grandes conjuntos de datos. ¿Tiene sentido también para pequeños conjuntos de datos? ¿Existe una compensación notable entre memoria y CPU?
Estoy especialmente interesado si alguien ha elaborado algunos perfiles sobre esto, a la luz de la discusión reveladora sobre el rendimiento de comprensión de listas frente a map () y filter () . ( enlace alternativo )
<5.