擅长:python、mysql、java
<ol>
<li>生成器是惰性的,因此在迭代它们之前什么都不会发生(例如使用<code>sum</code>)。在</li>
<li>它只是让它更具可读性。如果你想这样写的话:
<code>bytes = (int(x) for x in (line.rsplit(None,1)[1] for line in wwwlog) if x != '-')</code></li>
<li>是的,在python2中<code>range</code>返回一个列表,您需要<code>xrange</code>来生成类似生成器的对象。在</li>
<li>它是在遍历生成器时计算的,在此之前不执行任何操作。在</li>
<li>是的,在python3中<code>range</code>的行为类似于python2的<code>xrange</code>。同样的情况也发生在其他函数上,比如<code>map</code>和<code>filter</code>。在</li>
</ol>
<p>生成器的主要优点是不会一次存储全部内容。它们的主要缺点是只能迭代一次。在</p>