手写一个python迭代器过程详解


Posted in Python onAugust 27, 2019

分析

  • 我们都知道一个可迭代对象可以通过iter()可以返回一个迭代器。
  • 如果想要一个对象称为可迭代对象,即可以使用for,那么必须实现__iter __()方法。
  • 在一个类的实例对象想要变成迭代器,就必须实现__iter__()和__next__()方法。
  • 调用iter()时,在对象内部默认调用__iter__(),即__iter__()的返回值应该是一个迭代器。
  • for的每次循环中或者next()时,都是自动调用迭代器的__next__()方法,并有一个返回值。

实现

class Classmate:
 def __init__(self):
  self.names = []
  self.num = 0
 def add(self, name):
  self.names.append(name)
 def __iter__(self):
  return self
 def __next__(self):
  if self.num < len(self.names):
   ret = self.names[self.num]
   self.num += 1
   return ret
  else:
   raise StopIteration
c = Classmate()
c.add("张三")
c.add("李四")
c.add("王五")
for i in c:
 print(i)
"""
张三
李四
王五
"""

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python定时检查启动某个exe程序适合检测exe是否挂了
Jan 21 Python
python使用wxpython开发简单记事本的方法
May 20 Python
python中virtualenvwrapper安装与使用
May 20 Python
Python使用matplotlib实现基础绘图功能示例
Jul 03 Python
Python实现常见的回文字符串算法
Nov 14 Python
Python自定义函数计算给定日期是该年第几天的方法示例
May 30 Python
python使用opencv对图像mask处理的方法
Jul 05 Python
Python如何使用k-means方法将列表中相似的句子归类
Aug 08 Python
Python面向对象之继承原理与用法案例分析
Dec 31 Python
Python docutils文档编译过程方法解析
Jun 23 Python
python opencv将多个图放在一个窗口的实例详解
Feb 28 Python
python超详细实现完整学生成绩管理系统
Mar 17 Python
浅析Python语言自带的数据结构有哪些
Aug 27 #Python
python3应用windows api对后台程序窗口及桌面截图并保存的方法
Aug 27 #Python
python协程gevent案例 爬取斗鱼图片过程解析
Aug 27 #Python
Python中Unittest框架的具体使用
Aug 27 #Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
Aug 27 #Python
Python3分析处理声音数据的例子
Aug 27 #Python
python中struct模块之字节型数据的处理方法
Aug 27 #Python
You might like
2020年4月放送!《Princess Connect Re:Dive》制作组 & 角色声优公开!
2020/03/06 日漫
php_xmlhttp 乱码问题解决方法
2009/08/07 PHP
WordPress中缩略图的使用以及相关技巧
2015/11/24 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
2015/12/29 PHP
php cookie工作原理与实例详解
2016/07/18 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
2020/07/10 PHP
js 深拷贝函数
2008/12/04 Javascript
javascript 进度条 实现代码
2009/07/30 Javascript
JavaScript 编写匿名函数的几种方法
2010/02/21 Javascript
js中格式化日期时间型数据函数代码
2010/11/08 Javascript
jQuery lazyload 的重复加载错误以及修复方法
2010/11/19 Javascript
java、javascript实现附件下载示例
2014/08/14 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
JavaScript实战之菜单特效
2016/08/16 Javascript
JavaScript仿聊天室聊天记录
2016/12/27 Javascript
js判断是否是手机页面
2017/03/17 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
2017/05/08 jQuery
详解Vue.js基于$.ajax获取数据并与组件的data绑定
2017/05/26 Javascript
微信小程序-滚动消息通知的实例代码
2017/08/03 Javascript
在Vue项目中使用snapshot测试的具体使用
2019/04/16 Javascript
详解如何实现Element树形控件Tree在懒加载模式下的动态更新
2019/04/25 Javascript
vue3实现v-model原理详解
2019/10/09 Javascript
[48:27]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
在python里从协程返回一个值的示例
2019/02/19 Python
通过canvas转换颜色为RGBA格式及性能问题的解决
2019/11/22 HTML / CSS
流行文化收藏品:Sideshow(DC漫画,星球大战,漫威)
2019/03/17 全球购物
历史学专业大学生找工作的自我评价
2013/10/16 职场文书
英语自荐信常用语句
2013/12/13 职场文书
简历自我评价模版
2014/01/31 职场文书
行政执法作风整顿剖析材料
2014/10/11 职场文书
2014年招生工作总结
2014/11/26 职场文书
会议室管理制度范本
2015/08/06 职场文书
MySQL8.0无法启动3534的解决方法
2021/06/03 MySQL
python使用PySimpleGUI设置进度条及控件使用
2021/06/10 Python
SpringBoot实现异步事件驱动的方法
2021/06/28 Java/Android