位置: IT常识 - 正文

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

发布时间:2024-01-23

推荐整理分享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兑换美元)

  • 采矿权承包出去资源税
  • 出口退税无纸化备案
  • 印花税应计什么科目?
  • 工业产值是含税价格吗
  • 房产税从价改从租,多缴税款要加收滞纳金吗
  • 股东权益是资产吗
  • 收回应收账款编制什么凭证
  • 超过库存现金限额的现金要及时存入银行
  • 房地产开发商需要缴纳什么税
  • 电子发票的有效性在哪里查看
  • 自建厂房出售如何计算所得税
  • 专用基金计入什么科目
  • 工程结算审核程序
  • 应付职工薪酬社保
  • 不容忽视的近义词
  • 税务机关核定应纳税额的具体程序和方法
  • 所得税费用什么时候结转
  • 进项是普票销项是专票,怎么交税
  • qq游戏怎么玩不了怎么回事
  • 没有社保的工人怎么办
  • windows10如何关闭杀毒软件
  • 物流公司的财务能学到东西吗
  • word的拼写检查总是变成法语
  • PHP:pg_fetch_all()的用法_PostgreSQL函数
  • 销售使用过的汽车会计分录
  • 股权投资借差
  • 微信公众平台开发
  • 中央公园纽约的历史背景
  • php密码修改
  • 政府基金如何开立账户
  • 租赁收入确认时点
  • pytorch csdn
  • 预付采购材料款60000元
  • python描述器有什么用
  • 固定资产清理的会计科目处理
  • 广告费支出税前扣除标准30
  • 公司负担个人所得税如何做账
  • 哪几类账户期末余额最大
  • 增值税专票不认证后果
  • dedecms使用教程
  • 一般纳税人增值税可以抵扣吗
  • 票据背书转让会计处理
  • 新版发票填开操作流程
  • 仓库出入库账本怎么做
  • 增值税延期滞纳金计算
  • mysql添加远程访问
  • 商誉是成本法还是收入法
  • 授权支付银行有权不给发么
  • 产品加工总是会出现问题的,100%合格是不可能的
  • 中小微企业优惠政策
  • 递延所得税资产和递延所得税负债
  • 银行金融手续费收费标准
  • 购买无形资产的手续费计入
  • 登记现金日记账收入栏的依据有
  • 无形资产及其他资产包括哪些科目
  • mysql官方监控工具
  • mysql数据库高可用方案
  • 列举linux常用的版本
  • fedora29
  • windows xp退役
  • win10周年更新版是什么意思
  • win批处理命令
  • win8系统找不到wifi
  • ms office是
  • win 8系统怎么样
  • 电脑kernel32.dll
  • sendmail邮件服务器
  • msn无法登录
  • ContentProvider之通过ContentResolver获取图像、视频、音频举例
  • css样式表规则由什么组成
  • Node.js中的什么模块是用于处理文件和目录的
  • uil的简单常用操作
  • noodoe如何使用
  • easyui加载数据慢
  • python基本介绍
  • jquery跨域请求有哪些方式
  • jquery移动版
  • 全国增值税务查询官网
  • 武汉 税务局
  • 房产税江苏2021年征收标准
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号