Python迭代器:iglob()的迭代器相比glob()的列表提供了什么?
给定这段代码:
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会把所有的项目都放在内存里。而迭代器则不需要这样做,所以它占用的内存更少。