13.2Python基础拾遗(2):生成器

@概述

  • 生成器是一种分多次进行“返回”(即生成)的函数;
  • 生成器是迭代器的一种,所以一个生成器对象可以通过next(mgenerator)的方式来进行轮询迭代,也就是分批次地生成数据;
  • 不同于常规函数,一次性地垄断一定的CPU时间片,完成返回后再彻底让出CPU,生成器是在每次生成(yield value)过后,暂时性地让出CPU执行权给外界,直到下一次的数据请求,即next(mgenerator)发生时,再重新拿回CPU的执行权;
  • 即:请求一次生成一次,直至迭代结束(系统抛出StopIteration错误);

下面是一个简单的生成器函数:

# 一个简单的生成器函数
# 间断性地生成(“返回”)一个又一个的值
# 每生成一次,就将CPU执行权让出,直到外界next(generator)
def myGenerator():
    mlist = [1, 2, 3]

    # 一次性地返回内容,函数结束
    # return mlist[0],mlist[1]

    # 生成:每次“返回”一部分,分多次完成全部“返回”
    for item in mlist:
        print("yield %d..." % (item))
        yield item  # 完成一次生成后,函数并未结束,但CPU执行权被让出,直到下一次的数据请求发生

        # 外界下一次提出数据请求时,才会执行到这里
        print("yield ok!")

在外界分批次地向生成器函数索取数据:

mg = myGenerator()
# print(type(mg))  # 

while True:
    try:
        print("give me one")

        # 分批次向生成器索取数据
        item = next(mg)
        print("-----item=%d-----\n" % (item))
        time.sleep(3)

    # 像迭代器一样捕获迭代停止异常
    except StopIteration:
        break

程序的执行结果如下:
13.2Python基础拾遗(2):生成器_第1张图片

你可能感兴趣的:(Python,语言程序设计,Python语言程序设计)