发电机:
当我们创建一个列表时,如果列表的长度太长,就会浪费内存,而且我们可能只使用其中的几个元素,所以python中还有另一种机制,即——生成器,来循环计算。
生成器可以看作是一种在需要时生成的方式,节省了计算机资源。
可以通过以下方式创建生成器
类似的列表生成公式:
使用next函数访问下一个元素
接近发电机的元件
访问越界异常
给函数增加产量。
著名的斐波那契数列,除了第一个和第二个数字,任何数字都可以通过将前两个数字相加得到:
1, 1, 2, 3, 5, 8, 13, 21, 34,
使用函数创建斐波那契数列
创造一个有产量的发电机
密码
请注意,当生成器调用时,它不会被执行,而只会在next()用于访问时被执行。执行顺序如图所示。
从函数执行开始到while循环,next()的起点是yield,终点是yield。上图3、4完成后注意判断是否满足循环条件。
生成器是一个函数,它记得自己上次返回时在函数体中的位置。对生成器函数的第二次(或第n次)调用跳到函数的中间,而最后一次调用的所有局部变量保持不变。
生成器不仅“记住”它的数据状态;生成器还“记住”它在流控制构造中的位置(在命令式编程中,这个构造不仅仅是一个数据值)。
发电机的特点:
节省内存
当迭代到下一个调用时,使用的所有参数都是第一次保留的,也就是说,整个函数调用的所有参数都是为第一次调用保留的,而不是新创建的。