python 的generator

本文介绍了Python的Generator,一种节省内存的序列生成方式。通过对比列表生成式,阐述了Generator如何在循环中按需生成元素。文章还讨论了创建Generator的两种方法,并详细解释了Generator函数的执行流程,特别是yield语句的作用。内容参考自廖雪峰的Python教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下内容总体是参考了廖雪峰(大大)的python教程,写下的笔记吧。
放一个廖大大的链接:
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00138681965108490cb4c13182e472f8d87830f13be6e88000

为什么: 直接生成列表,由于受内存限制,列表的容量有限。
如果列表的元素可以用某种算法推导出来,就可以利用一种机制在循环中不断推导后续的元素 ,称为生成器。

创建generator的方法:
1.把一个列表生成式的[ ] 改为 ()

@python
>>> L = [ x*x for x in range(10)]
>>> L
[0,1,2,3,4,5,6,7,8,9]

>>> g = ( x*x for x in range(10))
>>> g
<generator object <genexpr> at 0x104feab40>
>>>g.next()
0
>>>g.next()
1

>>> for n in g    //因为生成器g也是一个可以迭代的对象
...     print n
0
1
4
9
16
25
36
49
64
81

另一种实现generator的方式:

一种产生斐波那契序列的函数
这里写图片描述

改为生成器 只需把print 改为 yield
这里写图片描述

generator和函数执行流程不一样,函数顺序执行,遇到return或者最后一句返回,而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时,从上次返回的yield语句处继续执行。

这里写图片描述

这里写图片描述

以上内容均参考廖雪峰的python教程
http://www.liaoxuefeng.com/

侵删。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值