位置: 编程技术 - 正文

Python编程中实现迭代器的一些技巧小结(python中编写程序)

编辑:rootadmin

推荐整理分享Python编程中实现迭代器的一些技巧小结(python中编写程序),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:编写python,用python语言编写,用python语言编写,用python编写,用python语言编写,用python语言编写,python中编写程序,用python编写,内容如对您有帮助,希望把文章链接给更多的朋友!

yield实现迭代器如引言中的描述,实现一个可迭代的功能要是每次都手动实现iter,next稍稍有点麻烦,所需的代码也是比较客观。在python中也能通过借助yield的方式来实现一个迭代器。yield有一个关键的作能,它能够中断当前的执行逻辑,保持住现场(各种值的状态,执行的位置等等),返回相应的值,下一次执行的时候能够无缝的接着上次的地方继续执行,如此循环反复知道满足事先设置的退出条件或者发生错误强制被中断。其具体功能是可以当return使用,从函数里返回一个值,不同之处是用yield返回之后,可以让函数从上回yield返回的地点继续执行。也就是说,yield返回函数,交给调用者一个返回值,然后再“瞬移”回去,让函数继续运行, 直到吓一跳yield语句再返回一个新的值。使用yield返回后,调用者实际得到的是一个迭代器对象,迭代器的值就是返回值,而调用该迭代器的next()方法会导致该函数恢复yield语句的执行环境继续往下跑,直到遇到下一个yield为止,如果遇不到yield,就会抛出异常表示迭代结束。看一个例子:

光听描述就觉得和迭代器的工作方式很一致是吧,的确,yield能把它所在的函索变成一个迭代器,拿最经典的菲波那切数列的例子聊简述一下工作的方式:

我们有回想一下for关键字的语法糖,在这里遍历5以内的菲波那切数列值的时候,很显然fab(5)生成了一个可迭代的对象,遍历开始的时候它的iter方法被调用返回一个实际工作的迭代器对象,然后每一次调用它的next方法返回一个菲波那切数列值然后打印出来。我们可以将调用生成器函数返回的对象的属性打印出来,看一下到底发生了什么:

Python编程中实现迭代器的一些技巧小结(python中编写程序)

正如上面的描述,单纯调用fab并不会让函数立刻开始返回任何值,并且从打印出的fab(5)的属性列表能够看到,生成器函数返回的对象包含有__iter__,next的实现。与我们手动实现相比,使用yield很方便的就能够实现我们想要的功能,代码量缩减不少。

Generator Expressionpython中另一种能更优雅生成迭代器对象的方式就是使用生成器表达式Generator expression,它和列表解析表达式有着非常相似的写法,仅仅是把中括号[]变成()而已,不过小小改变产生的实际效果确实大大的不一样:

看过上面对yield的描述,这个例子以及对应的输出日志还是相当直接明了的,无论是temp_gen的打印日志描述,for语句遍历的输出结果还是调用dir输出的属性列表,都赤裸裸的表明生成器表达式确实生成了能够支持迭代的对象。另外表达式里面也能够调用函数,增加适量的过滤条件。

内置库itertools 和 iterpython内置的库itertools提供了大量的工具方法,这些方法能够帮助我们创建能进行高效遍历和迭代的对象,里面包含不少有意思并且有用的方法,比如像chain, izip/izip_longest, combinations, ifilter等等。在python中还有一个内置的iter函数非常有用,能够返回一个迭代器对象,之后也就能够进行可以查看对应的帮助文档简单看一下:

简单讲解Python编程中namedtuple类的用法 Python的Collections模块提供了不少好用的数据容器类型,其中一个精品当属namedtuple。namedtuple能够用来创建类似于元祖的数据类型,除了能够用索引来访问

小议Python中自定义函数的可变参数的使用及注意点 可变参数Python的可变参数有两种,一种是列表类型,一种是字典类型。列表类型类似C中的可变参数,定义方式为deftest_list_param(*args):forarginargs:printarg其

常见python正则用法的简单实例 下面列出Python正则表达式的几种匹配用法:1.测试正则表达式是否匹配字符串的全部或部分regex=ur""#正则表达式ifre.search(regex,subject):do_something()else:do_anothe

标签: python中编写程序

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

上一篇:Centos Python2 升级到Python3的简单实现(centos python2.7升级到3.7)

下一篇:简单讲解Python编程中namedtuple类的用法(python如何编程)

  • 缴纳个人所得税还算应届毕业生吗
  • 一般纳税人公账转法人私账
  • 借款利息收入是企业收入吗
  • 支付电费未开具发票
  • 实收资本印花税怎么申报税目
  • 个税抵扣夫妻双方只要一个人填写吗
  • 一个营业执照可以开几家淘宝店
  • 企业所得税季度申报填写示例
  • 微型企业政府补贴政策
  • 普通发票专用发票每张最高限额
  • 其他应收款报表数据怎么取
  • 利润表管理费用怎么算
  • 本月进项税大于销项税有留底,如何做会计分录
  • 小规模购买税盘的费用可以抵税吗
  • 事业单位已核销怎么处理
  • 付的押金能要回来吗
  • 承包方收取分包方费用
  • 用于在建工程的原材料进项税额可以抵扣吗
  • 转让无形资产收入属于销售收入吗
  • 企业的营业外收入包括
  • 收到快递关税做什么科目
  • 其他应付转到其他应收
  • 汇算清缴补交所得税后报表需要调整吗
  • 无形资产怎样计算折旧
  • 银行的贷款损失准备会计分录
  • 企业固定资产出售账务处理
  • 税务检查所得税调整
  • 如何使用定向流量
  • hif文件怎么打开
  • PHP:pcntl_getpriority()的用法_PCNTL函数
  • yolov5输出result
  • 弃置费用预计负债递延所得税怎么处理
  • php框架零基础入门
  • 前端file对象
  • thinkphp框架怎么用
  • 提供有形动产租赁服务的增值税税率为
  • 快速搞懂Pinia及数据持久化存储(详细教程)
  • css各种居中
  • vuex五个核心概念
  • 研发支出资本化支出属于什么科目
  • python 3.4.3 shell
  • python极客项目编程 豆瓣
  • 公司抽奖奖品怎么做账
  • 购买商品发生的费用计入
  • 发票开具的常见错误以及盖章问题
  • 增值税发票超过3个月可以作废吗
  • 奖金属于职工福利薪酬吗
  • 城建税减免性质代码是什么意思
  • 什么是外勤会计制度
  • 售后回购确认收入的时间
  • 个税申报逾期罚款怎么算
  • 收据可以入账报销吗
  • 安装防伪税控系统的方法
  • 为什么付款后没有记录
  • 有外经证还要缴纳企业所得税吗
  • 增值税申报表中期初未缴税额指什么
  • 报销核销
  • 税率调整后税差怎么算
  • 进项税额转出忘记结转
  • 收到劳务费发票如何申报个税
  • 期后事项的分类及处理原则
  • 日记账的建账工作
  • linux find 查找文件并重命名
  • win7怎么打开程序
  • centos 查看文件夹
  • 进程cmd.exe
  • win8资源管理器未响应
  • qdcsfs.exe - qdcsfs是什么进程 有何作用
  • windows7睡眠唤醒快捷键
  • win7纯净版和正版区别
  • win8怎么设置自启动
  • cocoswot
  • android studio string函数
  • centos 开机启动程序
  • unityxlua热更新方案
  • unity ngui
  • 银行端查询缴税凭证怎么打印
  • 广东增值税电子普通发票图片
  • 装修费也要缴纳房产税吗
  • 为什么每年都要交车船税是什么意思
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设