生成器Generator
在 Python 中,使用了 yield 的函数被称为生成器(generator)。
-
只有一个I.next()方法
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。 -
只记录当前位置:
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。 -
调用一个生成器函数,返回的是一个迭代器对象。
1 列表生成式
列表生成式在调用列表之前创建完整的列表,如果列表参数庞大,会占用大量的内存空间。
>>> L = [x*2 for x in range(10)]
>>> L
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
>>> L[3]
6
>>> len(L)
10
>>>
2 生成器
generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。
>>> I = (i*2 for i in range(10000))
>>> print(I)
<generator object <genexpr> at 0x0000021DB16747B0>
# 创建L和g的区别仅在于最外层的[]和(),L是一个list,而g是一个generator。
>>> for value in I:
... print(value)
0
...
11060
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
KeyboardInterrupt
>>><