生成器
1.生成器是通过一个或多个yield表达式构成的函数,每一个生成器都是一个迭代器(但是迭代器不一定是生成器)。
2.生成器是可以迭代的,但只可以读取它一次。这样就避免了数据消耗内存空间。
3.生成器并不会一次返回所有结果,而是每次遇到yield关键字后返回相应结果,并保留函数当前的运行状态,等待下一次的调用。简要理解:yield就是 return 返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后开始。
4.生成器也是一个迭代器,那么它就应该支持next方法来获取下一个值。
基本操作
def func():
for i in xrange(10);
yield i
调用如下
>>> f = func()
>>> f # 此时生成器还没有运行
<generator object func at 0x7fe01a853820>
>>> f.next() # 当i=0时,遇到yield关键字,直接返回
0
>>> f.next() # 继续上一次执行的位置,进入下一层循环
1
…
>>> f.next()
9
>>> f.next() # 当执行完最后一次循环后,结束yield语句,生成StopIteration异常
Traceback (most recent call last):
File “”, line 1, in
StopIteration
>>>
每天进步一点点,开心也多一点点