迭代器

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循环

迭代器的定义与自定义一个迭代器相关推荐

  1. return error怎么定义_自定义一个注解校验接口参数

    这段时间封装了很多的sdk,有一些sdk要求请求参数做验证,由于封装sdk肯定是用到第三方的依赖越少越好,所以自己不才写了一个注解的校验,本版本校验没有给出自定一点message,如果要可以自己加上, ...

  2. python手写一个迭代器_搞清楚 Python 的迭代器、可迭代对象、生成器

    很多伙伴对 Python 的迭代器.可迭代对象.生成器这几个概念有点搞不清楚,我来说说我的理解,希望对需要的朋友有所帮助. 1 迭代器协议 迭代器协议是核心,搞懂了这个,上面的几个概念也就很好理解了. ...

  3. Python生成器详解(自定义的迭代器)

    文章目录 一 .生成器与yield 二. yield表达式应用 三. 三元表达式.列表生成式.生成器表达式 3.1 三元表达式 3.2 列表生成式 3.3 字典生成式 3.4 集合生成式 3.5 生成 ...

  4. es6 迭代器(遍历器)Iterator 自定义遍历器 lterator/简单模拟values方法 for of运行机制 Array/Set/Map默认迭代器接口 对象设置迭代器

    文章目录 迭代器 Iterator 用处 (需要自定义遍历数据的时候) 自定义 遍历器 lterator 简单模拟values方法 Array Set Map 默认迭代器接口 entries valu ...

  5. java如何定义一个变长数组_如何自定义一个长度可变数组

    摘要:本文主要写了如何自定义一个长度可变数组 数组是在程序设计中,为了处理方便,把具有相同类型的若干元素按无序的形式组织起来的一种形式 在定义之初,数组的长度就被定义 新建数组有很多方式 下面两个都可 ...

  6. python迭代器好处_关于Python中迭代器的作用

    迭代器的定义:含有__iter__()方法和__next__()方法的就是迭代器,即(iterate) 含有__iter__()方法就可以使用for循环,即iterable(可迭代的) Iterabl ...

  7. python自定义一个可迭代类_python进阶之自定义可迭代的类

    自定义可迭代的类 列表可以获取列表的长度,然后使用变量i对列表索引进行循环,也可以获取集合的所有元素,且容易理解.没错,使用列表的代码是容易理解,也很好操作,但这是要付出代价的.列表之所以可以用索引来 ...

  8. python生成器与迭代器的区别_python生成器和迭代器的区别

    匿名用户 1级 2016-10-13 回答 迭代器和生成器都是Python中特有的概念,迭代器可以看作是一个特殊的对象,每次调用该对象时会返回自身的下一个元素,从实现上来看,一个可迭代的对象必须是定义 ...

  9. 迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_iterator)}...

    一.迭代器适配器 反向迭代器 插入迭代器 IO流迭代器 其中反向迭代器可以参考以前的文章. 二.插入迭代器 插入迭代器实际上是一个输出迭代器(*it=; ++) back_insert_iterato ...

最新文章

  1. OpenResty+Keepalived组建高可用集群+双主模式
  2. WP7应用开发笔记(12) 添加页面动画
  3. 深度学习与概率、统计的有趣探讨
  4. 忘记了root密码怎么办?
  5. 绑定dictionary 给定关键字不再字典中_VBA数组与字典解决方案第51讲:字典嵌套及二级下拉菜单的制作...
  6. rh9.0虚拟机dmesg启动过程分析(1)
  7. ubuntu18.04配置远程服务器:安装ssh
  8. 程序员最想要十八般武艺俱全的“保姆型”项目经理!
  9. ComponentOne Ultimate 2012 v2 新特性
  10. 清除子节点、创建子节点函数
  11. fiddler实现将http请求的js转为本地的js文件
  12. 幂的后三位相同 详解(C++)
  13. 制作种子怎么上传服务器,怎么做种子,又怎么发布呢?
  14. windows下如何制作和应用数字签名证书 全流程
  15. 汽车自动驾驶技术与产品研发仿真测试软件—panosim(一)
  16. Jpa是什么——Jpa使用详解
  17. 软硬件交互 - 扫码枪
  18. 论文格式问题解决,标题前的黑点去除,分页后产生的空格消除。
  19. 抖音浏览量的作用是什么?
  20. 乐字节炫酷HTML 与 CSS

热门文章

  1. zk4元年拆解_莆田纯原版本科比四代ZK4细节、拆解展示
  2. 磁盘阵列和存储服务器的区别
  3. 论文笔记 | Conducting research in marketing with quasi-experiments
  4. zabbix结合qqmail发送告警信息
  5. GRE词汇统计大全(一)
  6. 多传感器融合定位三-3D激光里程计其三:点云畸变补偿
  7. Designing Websites for Performance 如何设计高性能网站 Lynda课程中文字幕
  8. MIT Molecular Biology 笔记6 转录的调控
  9. Emulator: Warning: Quick Boot / Snapshots not supported on this machine. A CPU with EPT + UG featur
  10. 分布式数据库稳定性资料整理