生成器是用来创建Python序列的一个对象。使用它可以迭代庞大的序列,且不需要在内存中创建和存储整个序列。通常,生成器是为迭代器产生数据的。每次迭代生成器时,它会记录上一次调用的位置,并且返回下一个值。这点和普通的函数是不一样的,一般函数都不记录前一次调用,而且都会在函数的第一行开始执行。
       如果你想创建一个比较大的序列,使用生成器推导的代码会很长,这时可以尝试写一个生成器函数。生成器函数和普通函数类似,但是他的返回值使用yield语句声明而不是return。

#下面编写我们自己的range()函数版本:
>>> def my_range(first=0, last=10, step=1):
...     number = first
...     while number < last:
...        yield number
...        number += step
...
#这是一个普通的函数:
>>> my_range
<function my_range at 0x10193e268>
#并且它返回的是一个生成器对象:
>>> ranger = my_range(1, 5)
>>> ranger
<generator object my_range at 0x101a0a168>
#可以对这个生成器对象进行迭代:
>>> for x in ranger:
...     print(x)
...
1
2
3
4


 摘抄自《Python语言及其应用》第4.8节 -- 生成器