二十、生成器

mac2024-10-14  65

生成器的简介

1、生成器的本质仍然为迭代器 2、生成器实现的方案有两种,分别为:

生成器函数生成器表达式

3、生成器的特点:生成器只会记录当前位置与下一个位置

生成器函数

生成器函数的特点和定义: 1、生成器函数执行之后会得到一个生成器作为返回值 2、只要含有yield关键字的函数都是生成器函数,且yield不可以和return共用 3、yield关键字需要写在函数内部,与return不同的是其不会结束一个函数 4、只有在遇到__next__()时,生成器函数才会正式执行,并且遇到yield关键字暂停,当再次调用__next__()时,生成器函数才会继续执行,以此类推. 简单实例:

def generator(): print(1) yield 'a' print(2) yield 'b' ret = generator() #调用generator()函数后,返回一个生成器,被ret变量接收,但此时并不会执行函数 result = ret.__next__() #遇到了__next__()方法,执行函数,遇到yield关键字停止 result2 = ret.__next__() #与上面一样,继续执行函数体,遇到yield结束 result3 = ret.__next__() #由于此时生成器的主体已经被执行完(在上一步执行完了第二个yield语句),所以再执行__next__()会报错。

说明: 针对上面实例,由于前两次的next()方法已经取空了生成器,所以第三次再调用next方法时,报错,详情见代码中注释。

生成器函数的应用实例

从1到两百万,逐次计数

def count(): for i in range(1,2000001): yield "第{n}次".format(n=i) g = count() #然后调用生成器g即可,如: n = g.__next__()
最新回复(0)