我在查看从互联网上下载的一段代码,它是一个基本的网络爬虫。我遇到了下面这个 for
循环:
for link in (links.pop(0) for _ in xrange(len(links))):
...
现在,我认为下面的代码也可以工作:
for link in links:
....
links=[]
研究后发现,第一次实例会清除链接并生成一个生成器对象 (genexpr)。在 for 循环中从未使用”链接”,因此它的长度减少与代码无关。为什么要使用 xrange 并每次弹出元素?即使用生成器对象是否有优势而非调用标准列表的元素?此外,在哪些情况下将使用生成器对象是有用的?
for
循环内部的代码(在你的问题中被省略了)依赖于len(links)
每次迭代都会减少这一事实? - Frédéric Hamidixrange()
时对len(links)
的初始调用。 - Frédéric Hamidilinks
。甚至没有用到它的长度。 - shashwat