生成器
当我们需要产生很大的一个列表时候如果使用列表生成式,会占用比较大的内存空间,这时我们一种能够边循环边计算的机制来不断推断后续的元素,我们成为生成器。
第一种形式
只要把一个列表生成式的[]
改成()
,就创建了一个生成器:
>>> it = (x*2 for x in [1,2,3])
>>> it
<generator object <genexpr> at 0x10f81e468>
使用next()
函数获取生成器的下一个返回值。
>>> next(it)
2
>>> next(it)
4
>>> next(it)
6
>>> next(it)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
生成器保存的是算法,每次调用next(g)
,就计算出it
的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration
的错误。
上面这种使用next()
是在是太不方便了,我们可以方便的使用for
循环: