Python迭代器:iglob()的迭代器在glob()的列表中提供了什么?

时间:2010-11-26 16:53:09

标签: python iterator

鉴于这段代码:

from glob import glob, iglob

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

print ''

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

读取glob的documentation我看到glob()返回一个基本的文件列表,iglob是一个Iterator。但是我能够迭代两者并且每个文件返回相同的文件列表。

我已经阅读了Iterator上的文档,但它还没有真正理解这个主题!

那么返回Iterator的iglob()有什么好处为我提供了glob()的列表?我是否能从我的老朋友那里获得额外的功能?

2 个答案:

答案 0 :(得分:21)

文档本身提到了不同之处:

  

返回一个迭代器,它产生与glob()相同的值,而不是实际同时存储它们。

基本上,list会包含内存中的所有项目。迭代器不需要,因此它需要更少的内存。

答案 1 :(得分:3)

添加到amit's answer。 iglob()在特定情况下很有用,如果您删除列表中的目录,则列表中的文件和文件夹将由glob()存储,因此在循环中进一步访问会引发异常。但是通过使用iglob(),我们可以克服并发修改异常