python生成器

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的作用保存上次执行的状态

 



原文地址:https://www.cnblogs.com/Acekr/p/7467631.html