内容绝大部分出自《Python高级编程》,Luke Sneeringer,清华大学出版社,Python版本2.7。
代码部分经修改可以完整运行,方便理解和直接测试。
生成器只在需要时才计算序列中的值,节省了内存空间。
生成器是一个函数,单次执行,直到迭代终止,可以表示无限序列(通过一个while true语句)。
生成器通常是通过yield语句实现。yield不会终止函数执行,而是暂停函数,当调用next或者send方法触发生成器时,生成器则从暂停位置继续执行。
|
|
尽量写了个能看出yield语句暂停位置的东西:
|
|
输出如下:1234567891011121314151617181920Output 1Before yield: [1] yield output: 1Output 2After yield: [1]Before yield: [1, 1] yield output: 1Output 3After yield: [1, 1]Before yield: [1, 2] yield output: 2Output 4After yield: [1, 2]Before yield: [2, 3] yield output: 3Output 5After yield: [2, 3]Before yield: [3, 5] yield output: 5