Python生成器如何节省内存

时间:2015-01-08 18:02:15

标签: python generator

我理解生成器返回一个可以保存状态的迭代的一般概念。并且不会一次计算所有内容,而是每次调用next时计算。这是如何运作的?例如[x for x in range(10) if x%2==0] vs (x for x in range(10) if x%2==0)。在列表理解中,一切都被计算并立即存储在内存中。

在生成器中,不生成整个列表,而是生成一个可迭代的生成器对象,该对象计算每次调用next。但是这个发电机必须以某种方式知道它的边界"对吧?发电机如何知道,如果后台没有执行所有计算,从何处上车?我认为它必须知道列表理解中的每一步,并最终如果你最终在整个生成器中循环直到命中StopIteration,我认为你使用的内存大致相同。

1 个答案:

答案 0 :(得分:1)

  

但是这个发生器必须以某种方式知道它的“边界”,对吧?

不,不!它只是继续卡车运输,直到遇到StopIteration。它一次只能在内存中处理一个元素,然后丢弃它。