首页 > 代码库 > 29.generator

29.generator

generator

1.生成器函数:

       函数中有yield的就是生成器函数,执行生成器函数得到一个生成器,生成器具备生成某些东西的能力

       yield具有返回值,退出函数体,保留进度的功能,下次调用__next__功能继续从当前位置开始执行

 

2.生成器:

       生成器函数的产物

 

3.生成器的意义:

       python2.7中的xrange就是一个生成器函数,但是在3.6中已经被移除

#!/usr/bin env python
# -*- coding:utf-8 -*-
# python 2.7
print(range(10))
print(xrange(10))
‘‘‘
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
xrange(10)
‘‘‘

  其意义在于:range(10)会在内存中一次性生成10个元素,而xrange(10)却得到一个生成器,在需要用的时候再生成某个元素,节约内存

 

4.在python3中用生成器实现xrange函数

def xrange(n):
    print(‘start‘)
    start = 0
    while start < n:
        yield start
        start += 1

obj = xrange(5)
n1 = obj.__next__()
n2 = obj.__next__()
n3 = obj.__next__()
n4 = obj.__next__()
n5 = obj.__next__()
n6 = obj.__next__()
#n7 = obj.__next__()
print(n1, n2, n3, n4, n5, n6)

 

5.生成器执行流程

技术分享

 

  

29.generator