python 入门之生成器

  • A+
所属分类:python基础入门

生成器

当我们创建一个列表时,如果列表的长度过大,会浪费内存,而且我们可能只会使用其中的几个元素,因此在python中还有一种一边循环一遍计算的机制,——生成器

生成器可以看做为一种方式,需要时才会产生,节约计算机资源

创建生成器的方式有

类似列表生成式:

把列表生成式的[] 换成()python 入门之生成器使用next函数访问下一元素

python 入门之生成器

访问生成器的元素

访问越界异常

python 入门之生成器

在函数里边加入yield

著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:

1, 1, 2, 3, 5, 8, 13, 21, 34, ...

python 入门之生成器

使用函数创建斐波拉契数列

使用yield创建生成器

python 入门之生成器

代码

注意生成器调用时,不会执行,当使用next()访问时,才执行,执行顺序如图

python 入门之生成器

python 入门之生成器

从函数的开始执行到while循环里边,使用next()的起点为yield,终点也是yield,注意在上图的3、4完成后判断是否满足循环条件,

生成器是这样一个函数,它记住上一次返回时在函数体中的位置。对生成器函数的第二次(或第 n 次)调用跳转至该函数中间,而上次调用的所有局部变量都保持不变。

生成器不仅“记住”了它数据状态;生成器还“记住”了它在流控制构造(在命令式编程中,这种构造不只是数据值)中的位置。

生成器的特点:

节约内存

迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是说,在整个所有函数调用的参数都是第一次所调用时保留的,而不是新创建的

weinxin
我的微信公众号
爱真理,得永生!          爱在灵灵久博客,网罗天下,福利大家!

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: