Étant donné le morceau de code:Iterators Python: Que fournit l'Iterator d'iglob() sur la liste de glob()?
from glob import glob, iglob
for fn in glob('/*'):
print fn
print ''
for fn in iglob('/*'):
print fn
lecture du documentation pour glob Je vois que glob() retourne une liste de base des fichiers et iglob un itérateur. Cependant, je suis capable de parcourir les deux et la même liste de fichiers est renvoyée par chacun d'entre eux.
J'ai lu la documentation sur Iterator mais elle n'a pas vraiment perdu de clarté sur le sujet!
Alors, quel avantage iglob() renvoyant un Iterator me fournit-il dans la liste de glob()? Est-ce que je gagne des fonctionnalités supplémentaires par rapport à mon ancien ami?
Ajoutez simplement que cela s'appelle 'évaluation paresseuse'. Nous ne faisons rien tant que nous n'en avons pas besoin. – demas
Note: pour un seul répertoire, l'utilisation de la mémoire est la même (en raison de l'implémentation actuelle via 'os.listdir()'). L'avantage est présent s'il y a plusieurs répertoires avec beaucoup de fichiers. – jfs
Comme @JFSebastian a dit, iglob vitesse/avantage mémoire sur glob est gêné par os.listdir() (voir [this] (http://code.activestate.com/lists/python-list/184205/)): ceci Cela signifie qu'ils seront lents sur les répertoires avec beaucoup de fichiers. Si vous avez ce problème, consultez [formic] (http://pypi.python.org/pypi/formic). Exemple [ici] (http://stackoverflow.com/a/10597254/633403). –