生成器也是一种迭代器,但是你只能对其迭代一次。这是因为它们并没有把所有的值存在内存中,而是在运行时生成值。你通过遍历来使用它们,要么用一个“for”循环,要么将它们传递给任意可以进行迭代的函数和结构。大多数时候生成器是以函数来实现的。然而,它们并不返回一个值,而是yield(暂且译作“生出”)一个值。这里有个生成器函数的简单例子:
def generator_function():
for i in range(10):
yield i
for item in generator_function():
print(item)
运行结果:
D:\python3.6.1\python.exe F:/python_Advanced/generators.py
0
1
2
3
4
5
6
7
8
9
Process finished with exit code 0
这个案例并不是非常实用。生成器最佳应用场景是:你不想同一时间将所有计算出来的大量结果集分配到内存当中,特别是结果集里还包含循环。