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
的文档,但它并没有真正阐明这个主题!
那么,通过 glob()
返回 Iterator
为我提供的列表相比,iglob()
有什么好处呢?我是否比我的老朋友低级列表获得了额外的功能?
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?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
文档本身提到了差异:
基本上列表将包含内存中的所有项目。迭代器不需要,因此它需要更少的内存。
The difference is mentioned in the documentation itself:
Basically list will have all the items in memory. Iterator need not, and hence it requires less memory.
添加到 amit 的答案 。
iglob()
在特定情况下很有用,如果删除列表中的目录,列表中的文件和文件夹将由glob()
存储,因此进一步循环中的访问会抛出异常。但是通过使用iglob()
,我们可以克服并发修改异常。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 byglob()
and hence further access in the loop throws exception. But by usingiglob()
we can overcome the concurrent modification exception.