迭代器的定义与自定义一个迭代器
迭代器
1,如何让一个对象成为一个可以迭代的对象?
- 该对象的内部需要实现 __iter__方法
- 代码示例:
from collections import Iterable, Iterator class Groups(object):def __init__(self):self.names = []def add(self, name):self.names.append(name)def __iter__(self):passclass GroupIterator(object):def __iter__(self):passdef __next__(self):return 11group = Groups() group.add("老王") group.add("老张") group.add("老李")if isinstance(group, Iterable):print("这是一个可以迭代的对象")if isinstance(GroupIterator(), Iterator):print("这是一个迭代器")
2, 什么是迭代器?
- 迭代器需要满足两个条件
- 内部实现__iter__方法
- 内部实现__next__方法
3,自定义一个迭代器
- 根据以上知识点自定义一个迭代器
from collections import Iterable, Iteratorclass Groups(object):def __init__(self):self.names = []def add(self, name):self.names.append(name)def __iter__(self):return GroupIterator(self)class GroupIterator(object):def __init__(self, obj):self.obj = objself.num = 0def __iter__(self):passdef __next__(self):if self.num < len(self.obj.names):ret = self.obj.names[self.num]self.num += 1return retelse:# 抛出异常,终止迭代raise StopIterationgroup = Groups() group.add("老王") group.add("老张") group.add("老李")if isinstance(group, Iterable):print("这是一个可以迭代的对象")if isinstance(GroupIterator(group.names), Iterator):print("这是一个迭代器")for name in group:print(name)
4,完善迭代器
- 代码示例:
from collections import Iterable, Iteratorclass Groups(object):def __init__(self):self.names = []self.num = 0def add(self, name):self.names.append(name)def __iter__(self):return selfdef __next__(self):if self.num < len(self.names):ret = self.names[self.num]self.num += 1return retelse:# 抛出异常,终止迭代raise StopIterationgroup = Groups() group.add("老王") group.add("老张") group.add("老李")for name in group:print(name)
5, 总结
- 可迭代对象
- 实现__iter__方法
- 迭代器
- 实现__iter__方法和__next__方法
- 一个对象时一个迭代器,那么他一定可以迭代,但是一个对象可以迭代,不一定是一个迭代器,比如for循环
迭代器的定义与自定义一个迭代器相关推荐
- return error怎么定义_自定义一个注解校验接口参数
这段时间封装了很多的sdk,有一些sdk要求请求参数做验证,由于封装sdk肯定是用到第三方的依赖越少越好,所以自己不才写了一个注解的校验,本版本校验没有给出自定一点message,如果要可以自己加上, ...
- python手写一个迭代器_搞清楚 Python 的迭代器、可迭代对象、生成器
很多伙伴对 Python 的迭代器.可迭代对象.生成器这几个概念有点搞不清楚,我来说说我的理解,希望对需要的朋友有所帮助. 1 迭代器协议 迭代器协议是核心,搞懂了这个,上面的几个概念也就很好理解了. ...
- Python生成器详解(自定义的迭代器)
文章目录 一 .生成器与yield 二. yield表达式应用 三. 三元表达式.列表生成式.生成器表达式 3.1 三元表达式 3.2 列表生成式 3.3 字典生成式 3.4 集合生成式 3.5 生成 ...
- es6 迭代器(遍历器)Iterator 自定义遍历器 lterator/简单模拟values方法 for of运行机制 Array/Set/Map默认迭代器接口 对象设置迭代器
文章目录 迭代器 Iterator 用处 (需要自定义遍历数据的时候) 自定义 遍历器 lterator 简单模拟values方法 Array Set Map 默认迭代器接口 entries valu ...
- java如何定义一个变长数组_如何自定义一个长度可变数组
摘要:本文主要写了如何自定义一个长度可变数组 数组是在程序设计中,为了处理方便,把具有相同类型的若干元素按无序的形式组织起来的一种形式 在定义之初,数组的长度就被定义 新建数组有很多方式 下面两个都可 ...
- python迭代器好处_关于Python中迭代器的作用
迭代器的定义:含有__iter__()方法和__next__()方法的就是迭代器,即(iterate) 含有__iter__()方法就可以使用for循环,即iterable(可迭代的) Iterabl ...
- python自定义一个可迭代类_python进阶之自定义可迭代的类
自定义可迭代的类 列表可以获取列表的长度,然后使用变量i对列表索引进行循环,也可以获取集合的所有元素,且容易理解.没错,使用列表的代码是容易理解,也很好操作,但这是要付出代价的.列表之所以可以用索引来 ...
- python生成器与迭代器的区别_python生成器和迭代器的区别
匿名用户 1级 2016-10-13 回答 迭代器和生成器都是Python中特有的概念,迭代器可以看作是一个特殊的对象,每次调用该对象时会返回自身的下一个元素,从实现上来看,一个可迭代的对象必须是定义 ...
- 迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_iterator)}...
一.迭代器适配器 反向迭代器 插入迭代器 IO流迭代器 其中反向迭代器可以参考以前的文章. 二.插入迭代器 插入迭代器实际上是一个输出迭代器(*it=; ++) back_insert_iterato ...
最新文章
- OpenResty+Keepalived组建高可用集群+双主模式
- WP7应用开发笔记(12) 添加页面动画
- 深度学习与概率、统计的有趣探讨
- 忘记了root密码怎么办?
- 绑定dictionary 给定关键字不再字典中_VBA数组与字典解决方案第51讲:字典嵌套及二级下拉菜单的制作...
- rh9.0虚拟机dmesg启动过程分析(1)
- ubuntu18.04配置远程服务器:安装ssh
- 程序员最想要十八般武艺俱全的“保姆型”项目经理!
- ComponentOne Ultimate 2012 v2 新特性
- 清除子节点、创建子节点函数
- fiddler实现将http请求的js转为本地的js文件
- 幂的后三位相同 详解(C++)
- 制作种子怎么上传服务器,怎么做种子,又怎么发布呢?
- windows下如何制作和应用数字签名证书 全流程
- 汽车自动驾驶技术与产品研发仿真测试软件—panosim(一)
- Jpa是什么——Jpa使用详解
- 软硬件交互 - 扫码枪
- 论文格式问题解决,标题前的黑点去除,分页后产生的空格消除。
- 抖音浏览量的作用是什么?
- 乐字节炫酷HTML 与 CSS
热门文章
- zk4元年拆解_莆田纯原版本科比四代ZK4细节、拆解展示
- 磁盘阵列和存储服务器的区别
- 论文笔记 | Conducting research in marketing with quasi-experiments
- zabbix结合qqmail发送告警信息
- GRE词汇统计大全(一)
- 多传感器融合定位三-3D激光里程计其三:点云畸变补偿
- Designing Websites for Performance 如何设计高性能网站 Lynda课程中文字幕
- MIT Molecular Biology 笔记6 转录的调控
- Emulator: Warning: Quick Boot / Snapshots not supported on this machine. A CPU with EPT + UG featur
- 分布式数据库稳定性资料整理