Python中的生成器是什么

2025-07-20 01:35:46
Python中的生成器是什么

2、生成器,是一个用来创建迭代器的工具。它简单而强大,类似写函数那样进行定义,但是需要返回数据时不是使用return,而是使用yield语句。生成器函数用yield语句返回数据的“函数”,称为生成器函数。我们把上一节中自定义类LessThan改写成生成器函数

Python中的生成器是什么

3、通过生成器改写LessThan类后,代码更加简洁紧凑,因为它自动创建了__iter__()和__next__()方法,通过for循环可以遍历生成器对象。接下来我们定义一个生成器对象lt,对这个生成器对象调用next(),每一次调用它都会从上次离开的位置回复执行(也就是记住上次执行语句时的所有数据值)。当生成器生成了所有元素(生成器终结)就会引发StopIteration错误。

Python中的生成器是什么

4、生成器解析式为了实现一些简单的生成器,我们可以不用函数的形式,而是用类似列表解析式的语法,将外层的方括号用圆括号代替即可。生成器表达式相比完整的生成器更紧凑但较不灵活,相比等效的列表推导式则更为节省内存。比如下面的的代码,用列表表达式生成的mylist的每个元素都保存在内存中,而mygener每次迭代时才会产生一个元素。假设元素个数不是10,而是100万甚至更多,此时生成器的内存优势会非常明显。

Python中的生成器是什么

5、生成器解析式被设计用于生成器将立即被外层函数所使用的情况,比如:

Python中的生成器是什么

6、sum()括号里面的i*i for i in range(10)就是一个生成器解析式,避免生成一个列表而占用过多内存。同样的,下面的例子中都是使用了生成器解析式:

Python中的生成器是什么

7、总结Python提供了两种方式实现生成器:(1)生成器函数语法上与普通函数相似,用yield替代return换回值;自动实现迭代器协议:__iter__()菱诎逭幂方法和__next__()方法。没有值可返回时,引起StopInteration异常。yield语句挂起生成器函数的状态,以便再次迭代时从离开的状态继续执行。(2)生成器解析式类似列表解析式,用圆括号替换方括号,从而简单实现简单的生成器。(3)生成器的优点代码紧凑,节省内存。不像列表可以多次遍历,生成器只能遍历一遍。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢