Python Iterators: What does iglob()'s Iterator provide over glob()'s list?

Question:

Given the piece of code:

from glob import glob, iglob

for fn in glob('/*'):
    print fn

print ''

for fn in iglob('/*'):
    print fn

Reading the documentation for glob I see that glob() returns a basic list of files and iglob an Iterator. However I’m able to iterate over both and the same list of files is returned by each of them.

I’ve read the documentation on Iterator but it hasn’t shed anymore light on the subject really!

So what benefit does iglob() returning an Iterator provide me over the list from glob()? Do I gain extra functionality over my old friend the lowly list?

Asked By: ghickman

||

Answers:

The difference is mentioned in the documentation itself:

Return an iterator which yields the same values as glob() without actually storing them all simultaneously.

Basically list will have all the items in memory. Iterator need not, and hence it requires less memory.

Answered By: amit

Adding to amit’s answer. iglob() is useful in the particular case where if you delete a directory in the list, the files and folders in the list will be stored by glob() and hence further access in the loop throws exception. But by using iglob() we can overcome the concurrent modification exception

Answered By: Ridhuvarshan
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.