生成器是一种特殊的迭代器。
一、创建生成器方式一:生成式表达式 就是解析语法,最外面用小括号。见前面。这种方式用到比较少
方式二:通过yeild方式 就是创建一个打印数字的函数,然后print语句替换掉。【例1】 一个函数只要有yeild就不是函数了,而是生成器的模板。调用函数的语句是创建生成器。就可以使用for循环调用了。【例2】 因为生成器是一种迭代器,所以一定可以用for循环迭代。【例2】
例1:创建斐波那契数列的生成器。 第一步,建立一个函数,打印出斐波那契数列
结果:
步骤2:把print()语句改掉。
结果:
什么也没输出。因为这已经不是一个函数了,而是一个生成器模板。
例2:
结果:
二、生成器的调用原理因为生成器是一种迭代器。for循环的原理就是,每次调用next(迭代器)来取一个值。我们用next()进行调试。 yeild的特点是把函数暂停,当下一次取值的时候会从暂停的地方继续走,而不是从头走。
结果:
当执行obj = fib(10)的时候,就会把10传给fib(n)。创建一个生成器对象。但是不执行内容。 当第一次执行next()的时候,程序从第2行执行到底8行,所以会打印出“11111111”和“22222222222”,然后返回a= 0,打印输出0。这时候, 当第二次调用next()的时候,程序是从第9行开始执行,而不是从头执行。所以打印的是“333333333”。
即:第一次从头执行,后面的都是从上次暂停的地方执行。
三、生成器的用处可以节省空间。
|