一、生成器概念
生成器不会把结果保存到一个系列中,而是保存生成器状态,在每次迭代的时候返回一个值,直到遇到StopIteration异常结束。并且生成器实现了迭代器协议,所以生成器就是可迭代对象。所以生成器的本身就是迭代器。
实现生成器的方式:
1.可以使用生成器函数
2.可以使用各种推导式构建迭代器
3.可以通过数据转化
二、yield的功能
yield语句一次返回一个结果,在每个结果中间,挂起函数状态,下次运行时在它离开的地方继续向下执行。
1 def genner(): 2 print(‘111‘) 3 yield 222 4 print(‘333‘) 5 yield 444 6 print(‘555‘) 7 yield 666 8 g = genner() 9 #print(g) print(g) 10 ‘‘‘ 11 111 12 222 13 333 14 444 15 ‘‘‘ 16 print(g.__next__()) 17 print(g.__next__())
yield 的功能:
1.函数中使用yield,可以将函数变成生成器
2.返回给调用者的值
3.并将指针停留在当前位置
生成器方法调用时,不会立即执行,需要调用next()方法,或者for循环来执行,使用for循环不用自己捕获StopIteration异常。