generator
1.生成器函数:
函数中有yield的就是生成器函数,执行生成器函数得到一个生成器,生成器具备生成某些东西的能力
yield具有返回值,退出函数体,保留进度的功能,下次调用__next__功能继续从当前位置开始执行
2.生成器:
生成器函数的产物
3.生成器的意义:
python2.7中的xrange就是一个生成器函数,但是在3.6中已经被移除
1 #!/usr/bin env python 2 # -*- coding:utf-8 -*- 3 # python 2.7 4 print(range(10)) 5 print(xrange(10)) 6 ''' 7 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 8 xrange(10) 9 '''
其意义在于:range(10)会在内存中一次性生成10个元素,而xrange(10)却得到一个生成器,在需要用的时候再生成某个元素,节约内存
4.在python3中用生成器实现xrange函数
1 def xrange(n): 2 print('start') 3 start = 0 4 while start < n: 5 yield start 6 start += 1 7 8 obj = xrange(5) 9 n1 = obj.__next__() 10 n2 = obj.__next__() 11 n3 = obj.__next__() 12 n4 = obj.__next__() 13 n5 = obj.__next__() 14 n6 = obj.__next__() 15 #n7 = obj.__next__() 16 print(n1, n2, n3, n4, n5, n6)
5.生成器执行流程
6、yelid与__next__
1 # next每遇到一次yield将执行yield以上的程序, 2 # 然后yield后面的值返回,并记录程序运行的位置 3 # 等待下一次的__next__和下一次的yield 4 # yield的作用保存上次执行的状态