位置: IT常识 - 正文

Python创建生成器的两种方法(python生成器定义)

编辑:rootadmin

推荐整理分享Python创建生成器的两种方法(python生成器定义),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python生成器怎么用,python生成器定义,python中的生成器,python生成器怎么用,python生成器怎么用,python3 生成器,python中的生成器,python生成器有几种写法,内容如对您有帮助,希望把文章链接给更多的朋友!

创建生成器方法

方法一

要创建一个生成器,有很多种方法。第一种方法很简单,只要把一个列表生成式的[ ]改成( )

创建L和G的区别仅在于最外层的[ ]和( ),L是一个列表,而G是一个生成器。我们可以直接打印出L的每一个元素,但我们怎么打印出G的每一个元素呢?如果要一个一个打印出来,可以通过next()函数获得生成器的下一个返回值:

运行结果:

运行结果:

生成器保存的是算法,每次调用next(G),就计算出G的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的异常。当然,这种不断调用next()实在是太变态了,正确的方法是使用for循环,因为生成器也是可迭代对象。所以,我们创建了一个生成器后,基本上永远不会调用next(),而是通过for循环来迭代它,并且不需要关心StopIteration异常。

相关推荐:《Python视频教程》

方法2

generator非常强大。如果推算的算法比较复杂,用类似列表生成式的for循环无法实现的时候,还可以用函数来实现。

Python创建生成器的两种方法(python生成器定义)

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

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

斐波拉契数列用列表生成式写不出来,但是,用函数把它打印出来却很容易:

运行结果:

仔细观察,可以看出,fib函数实际上是定义了斐波拉契数列的推算规则,可以从第一个元素开始,推算出后续任意的元素,这种逻辑其实非常类似generator。

也就是说,上面的函数和generator仅一步之遥。要把fib函数变成generator,只需要把print(b)改为yield b就可以了:

运行结果:

在上面fib的例子,我们在循环过程中不断调用yield,就会不断中断。当然要给循环设置一个条件来退出循环,不然就会产生一个数列出来。同样的,把函数改成generator后,我们基本上从来不会用next()来获取下一个返回值,而是直接使用for循环来迭代:

运行结果:

但是用for循环调用generator时,发现拿不到generator的return语句的返回值。如果想要拿到返回值,必须捕获StopIteration错误,返回值包含在StopIteration的value中:

运行结果:

相关推荐:

本文链接地址:https://www.jiuchutong.com/zhishi/304701.html 转载请保留说明!

上一篇:Python学习笔记(十一)-- Django API RESTful(python初学笔记)

下一篇:python美元转换成人民币转换代码(python兑换美元)

  • 国外收到怎么说
  • 运输服务属于生产劳务吗
  • 汇算清缴利润调整会计分录
  • 金蝶凭证汇总表字体变小
  • 交强险怎么查
  • 如何结转应交未交或多交增值税?
  • 支付所得税属于筹资活动吗
  • 租赁企业可以开具电费发票吗
  • 社会团体所涉及的法律
  • 所得税流程
  • 其他应收款账目
  • 劳动竞赛费用在什么科目列支做会计分录?
  • 油费预付卡如何开发票
  • 公司研发阶段的产品领料怎么处理?
  • 公司司机出车补贴
  • 收到3%的增值税专用发票可以抵扣吗
  • 拓展培训费如何开票
  • 小微企业劳务费税率
  • 小微企业开普通发票
  • 财产保险合同的主体变更
  • 培训费用开具什么发票
  • 减税降费各项政策
  • 某大宾馆因工作需要
  • 企业合并三种方式
  • 政府专项拨款账务处理
  • 所得税汇算清缴截止日期
  • 英雄联盟符文推荐怎么不弹出来
  • 华为鸿蒙一键抠图
  • 美元汇款怎么汇
  • 新会计准则下企业合并财务报表问题研究
  • 债权转增资本公积账务处理
  • 核定征收的企业怎么交所得税
  • 股权转让交易税计税依据是什么
  • 外购货物用于职工奖励
  • thinkphp实现163、QQ邮箱收发邮件的方法
  • 境外付款
  • 微信php开发
  • 上传图片照片
  • vue process.env.node_env
  • linux symbolic link
  • 暂估少了冲销时怎么办
  • 小规模纳税人开票额度
  • 待认证进项税额是二级科目还是三级科目
  • 加计抵减可以补提本年的税吗
  • 建筑总承包分包单位可以是市政总承包吗
  • 成本会计制造费用核算的内容
  • 施工企业预缴税款
  • 一般纳税人公司出售旧车怎么开票
  • sqlserver2016维护计划
  • mysql配置文件my.ini如何创建
  • 未认证key
  • sql共享
  • 减免进项税的分录怎么做
  • 股东借款的利息收入
  • 企业存货明细表和盘点表
  • 退货对方不开具红字发票怎么办
  • 转租收入如何入账
  • 预交增值税后期处理
  • 预付账款转营业外支出
  • 收到工程款怎么入账
  • 软件开发过程中,一个错误发现的越晚
  • 公司向法人借款需要交税吗
  • 无追索权保理的说法
  • 开来发票没有付款可以进入费用吗?
  • 解释sql server实例
  • 微软补丁修复时出现蓝屏现象
  • 电脑没有系统了如何重装系统
  • 怎么操作win10系统
  • linux如何操作数据库
  • window7主题变成xp了
  • windows8窗口
  • WIN10系统更新怎么关闭
  • jquery.inarray
  • jquery写函数
  • js如何使用
  • 残疾人就业保障金减免政策2022
  • 为什么发莎
  • 沈阳市税务局最新公告
  • 征求意见稿 讨论稿 送审稿
  • 浙江蹦极哪里好玩
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设