Dada la pieza de código:Iteradores de Python: ¿Qué proporciona el iterador de iglob() sobre la lista de glob()?
from glob import glob, iglob
for fn in glob('/*'):
print fn
print ''
for fn in iglob('/*'):
print fn
Lectura de la documentation para pegote veo que glob() devuelve una lista básica de archivos y iglob un iterador. Sin embargo, puedo iterar sobre ambos y cada uno de ellos devuelve la misma lista de archivos.
He leído la documentación en Iterator pero no ha arrojado más luz sobre el tema realmente!
Entonces, ¿qué beneficio me proporciona iglob() que devuelve un iterador sobre la lista de glob()? ¿Obtengo una funcionalidad extra sobre mi viejo amigo la humilde lista?
Solo agregue que se llama 'evaluación diferida'. No hacemos nada hasta que no lo necesitemos. – demas
Nota: para un solo directorio, el uso de la memoria es el mismo (debido a la implementación actual a través de 'os.listdir()'). La ventaja está presente si hay múltiples directorios con muchos archivos. – jfs
Como dijo @JFSebastian, la ventaja de iglob speed/memory sobre glob se ve obstaculizada por os.listdir() (ver [esto] (http://code.activestate.com/lists/python-list/184205/)): esto significa que ambos serán lentos en directorios con muchos archivos. Si tiene ese problema, consulte [formic] (http://pypi.python.org/pypi/formic). Ejemplo [aquí] (http://stackoverflow.com/a/10597254/633403). –