学习生成器之前,首先需要认识列表生成式,直奔主题。
1、简单列表生成式示例:
看样子好像很NB的样子,其实它等价于:
其实还是有点NB的,毕竟代码少了,手动嘻嘻嘻!
2、削微高级点的列表生成式:
生成式生成的数据可以交给函数处理,进而得到预定规则的一组数据。
下面有请主角登场!!!!
生成器:在Python中,一边循环一边计算的机制,称为生成器:generator。
我们知道了,通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。
创建生成器的姿势:将生成式的”[]”换成”()”就ok了,是不是超级简单。。。
由上面的例子可见,打印的a已不是一个列表,而是a的内存地址。而且a可以通过for循环将其中的值取出。
就用一个小栗子完成生成式和生成器比较吧:
生成器特性:
1.生成器只能一个个的取数据2.生成器只有在调用时才会生成相应的数据3.生成器只记住当前位置的地址,之前的的内存地址都没了4.只有一个__next__()方法5.生成器不能根据索引位置取值
示例:了解斐波那契数列(下个数为前两个数的和)
使斐波那契数列变成一个生成器
使用yield后,可以使用__next__()方法,中断函数的执行,在中断之后可以执行其他的操作,然后还可以通过__next__()再进入例如:
能看到这,那你又又又又又又要学到了:抓异常、抓异常、抓异常。重要的事情说三遍!!!
生成器示例高级,实现并行:
END!!!
Original: https://www.cnblogs.com/sunnytomorrow/p/13081734.html
Author: NorthFeng
Title: Python–生成器
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/590723/
转载文章受原作者版权保护。转载请注明原作者出处!