我理解一般的想法,即生成器返回一个“保存状态”的可迭代对象,并且不会立即计算所有内容,而是在每次调用时进行计算next。这是如何运作的?例如[x for x in range(10) if x%2==0]vs (x for x in range(10) if x%2==0)。在列表理解中,所有内容都会立即计算并存储在内存中。
在生成器中,不会生成整个列表,而是生成一个可迭代的生成器对象,该对象在每次调用 next 时进行计算。但这个生成器必须以某种方式知道它的“边界”,对吗?如果生成器没有在后台执行所有计算,它如何知道从哪里继续计算?我认为它必须知道列表理解中的每一步,最终如果您最终循环整个生成器直到达到 StopIteration,我认为您使用的内存量大致相同。
| 归档时间: |
|
| 查看次数: |
2276 次 |
| 最近记录: |