擅长:python、mysql、java
<p>我认为你的懒虫列表的概念是好的,但是你想直接访问生成器的n'th值的想法是有缺陷的。您使用<code>range(10)</code>作为迭代序列的例子是一个特例,其中所有值都是可以提前知道的。但是许多生成器是增量计算的,其中n值是基于n-1值计算的。斐波那契发生器就是这样一种:</p>
<pre><code>def fibonacci(n=1000):
a,b=1,1
yield a
while n>0:
n -= 1
yield b
a,b = b,a+b
</code></pre>
<p>这给出了熟悉的系列1,1,2,3,5,8。。。其中第n项是第n-1项和第n-2项之和。所以没有办法直接跳到第10项,你必须通过第0-9项才能到达。你知道吗</p>
<p>也就是说,你的懒人列表很不错,有几个原因:</p>
<ul>
<li><p>它允许您重新访问以前的值</p></li>
<li><p>它模拟直接访问,即使在覆盖下,生成器必须遍历所有增量值,直到到达“n”</p></li>
<li><p>它只计算实际需要的值,因为生成器是延迟计算的,而不是先发制人地计算1000个值,结果发现使用了前10个值</p></li>
</ul>