概述

迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
延迟计算或惰性求值 (Lazy evaluation)
迭代器不要求你事先准备好整个迭代过程中所有的元素。仅仅是在迭代至某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁。这个特点使得它特别适合用于遍历一些巨大的或是无限的集合。
今天创建了一个实体类,大致如下:
class Account(): def __init__(self, account_name, account_type, account_cost, return_amount=0): self.account_name = account_name # 账户名 self.account_type = account_type # 账户类型 self.account_cost = account_cost # 月结费用 self.return_amount = return_amount # 返还金额
然后创建一个实体列表:
accounts = [Account("张三", "年费用户", 450.00, 50),
Account("李四", "月结用户", 100.00),
Account("杨不悔", "月结用户", 190.00, 25),
Account("任我行", "月结用户", 70.00, 10),
Account("凌未风", "年费用户", 400.00, 40)]
我想要执行next()功能,也就是需要的时候“next”一下,得到List中的下一个元素。
直接测试一下:
结果发现List不支持next()特性。这时候,List只是一个iterable,而不是iterator。
iterable和iterator的区别如下:
其中, __iter__返回iterator对象, __next__则返回迭代过程的下一个元素。
1. 让列表成为iterator
要让前面的accounts List成为iterator只需简单的一个iter()函数:
accounts_iterator = iter(accounts) (next(accounts_iterator)).account_name
结果如下图所示:
这么简单的函数,估计还是有不少Python开发者不知道吧?
2. 自定义iterator对象
扩展开来讲,如何定义自己的iterator对象呢?其实也就是按照上面的定义,实现__iter__和__next__方法。
我们接下来定义一个AccountIterator类:
class AccountIterator():
def __init__(self, accounts):
self.accounts = accounts # 账户集合
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index >= len(self.accounts):
raise StopIteration("到头了...")
else:
self.index += 1
return self.accounts[self.index-1]
运行结果如:
通过这一阵折腾,next()功能就实现了。Python有不少意外的功能,还等着我们不断去探究,也许这就是Python的魅力及极客之处。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流。
# python
# iterator
# python3
# iterator实现
# Python 迭代器Iterator详情
# Python迭代器iterator生成器generator使用解析
# 一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Gen
# Python中Iterator迭代器的使用杂谈
# python中迭代器(iterator)用法实例分析
# Python浅析迭代器Iterator的使用
# 迭代
# 实现了
# 自己的
# 年费
# 这一
# 是在
# 第一个
# 在这
# 有不少
# 这就是
# 之处
# 遍历
# 只需
# 等着
# 不存在
# 自定义
# 要让
# 不支持
# 所示
# 这篇文章
相关文章:
Android滚轮选择时间控件使用详解
太平洋网站制作公司,网络用语太平洋是什么意思?
Bpmn 2.0的XML文件怎么画流程图
如何在云虚拟主机上快速搭建个人网站?
头像制作网站在线制作软件,dw网页背景图像怎么设置?
Python多线程使用规范_线程安全解析【教程】
建站主机解析:虚拟主机配置与服务器选择指南
C#怎么创建控制台应用 C# Console App项目创建方法
建站之星好吗?新手能否轻松上手建站?
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
如何通过老薛主机一键快速建站?
大连网站设计制作招聘信息,大连投诉网站有哪些?
如何在橙子建站中快速调整背景颜色?
如何通过智能用户系统一键生成高效建站方案?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
如何快速搭建虚拟主机网站?新手必看指南
宝塔面板如何快速创建新站点?
nginx修改上传文件大小限制的方法
如何在Ubuntu系统下快速搭建WordPress个人网站?
建站主机CVM配置优化、SEO策略与性能提升指南
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
开源网站制作软件,开源网站什么意思?
公司门户网站制作流程,华为官网怎么做?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
建站之星在线版空间:自助建站+智能模板一键生成方案
非常酷的网站设计制作软件,酷培ai教育官方网站?
如何在腾讯云服务器上快速搭建个人网站?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
C++时间戳转换成日期时间的步骤和示例代码
深圳网站制作的公司有哪些,dido官方网站?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
济南网站建设制作公司,室内设计网站一般都有哪些功能?
个人网站制作流程图片大全,个人网站如何注销?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
如何在Golang中使用replace替换模块_指定本地或远程路径
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
相册网站制作软件,图片上的网址怎么复制?
建站之星2.7模板快速切换与批量管理功能操作指南
如何用PHP工具快速搭建高效网站?
实例解析Array和String方法
如何做静态网页,sublimetext3.0制作静态网页?
网站专业制作公司有哪些,做一个公司网站要多少钱?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
如何通过虚拟主机快速搭建个人网站?
如何快速查询网址的建站时间与历史轨迹?
XML的“混合内容”是什么 怎么用DTD或XSD定义
广东企业建站网站优化与SEO营销核心策略指南
*请认真填写需求信息,我们会在24小时内与您取得联系。