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

33 投票
2 回答
32628 浏览
提问于 2025-04-16 07:39

给定这段代码:

from glob import glob, iglob

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

print ''

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

我查看了关于 glob文档,发现 glob() 返回的是一个简单的文件列表,而 iglob 返回的是一个 Iterator(迭代器)。不过,我发现我可以对这两者都进行遍历,而且它们返回的文件列表是一样的。

我也看过关于 Iterator 的文档,但这并没有让我更明白这个问题!

那么,iglob() 返回一个 Iterator 对我有什么好处呢?相比于 glob() 返回的列表,我能得到额外的功能吗?

2 个回答

13

补充一下amit的回答iglob()这个方法特别有用,尤其是在你从列表中删除一个文件夹的情况下。因为如果用glob(),它会把文件和文件夹都存储在列表里,这样在后续的循环中就可能会出现错误。但是使用iglob(),我们就能避免这种并发修改异常

36

文档里提到了它们之间的区别:

返回一个迭代器,它会产生和glob()一样的值,但不会同时把所有值都存储在内存里。

简单来说,list会把所有的项目都放在内存里。而迭代器则不需要这样做,所以它占用的内存更少。

撰写回答