手写一个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中的exec、eval使用实例
Sep 23 Python
python中的闭包用法实例详解
May 05 Python
Python中利用sqrt()方法进行平方根计算的教程
May 15 Python
用Python编写简单的微博爬虫
Mar 04 Python
Python 文件处理注意事项总结
Apr 10 Python
DataFrame中去除指定列为空的行方法
Apr 08 Python
pandas数据预处理之dataframe的groupby操作方法
Apr 13 Python
PyQt5每天必学之日历控件QCalendarWidget
Apr 19 Python
Python 通配符删除文件的实例
Apr 24 Python
python如何创建TCP服务端和客户端
Aug 26 Python
python+opencv实现摄像头调用的方法
Jun 22 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
Jul 01 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
php中__destruct与register_shutdown_function执行的先后顺序问题
2014/10/17 PHP
纯php生成随机密码
2015/10/30 PHP
php实现将HTML页面转换成word并且保存的方法
2016/10/14 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
js右键菜单效果代码
2007/07/21 Javascript
利用ASP发送和接收XML数据的处理方法与代码
2007/11/13 Javascript
js模拟弹出效果代码修正版
2008/08/07 Javascript
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
2011/09/09 Javascript
innerHTML与jquery里的html()区别介绍
2012/10/12 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
用nodejs写的一个简单项目打包工具
2013/05/11 NodeJs
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
浅谈Javascript数组的使用
2015/07/29 Javascript
JS模拟酷狗音乐播放器收缩折叠关闭效果代码
2015/10/29 Javascript
jQuery中的siblings用法实例分析
2015/12/24 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
两种JavaScript的AES加密方式(可与Java相互加解密)
2016/08/02 Javascript
JavaScript DOM节点操作方法总结
2016/08/23 Javascript
d3.js中冷门却实用的内置函数总结
2017/02/04 Javascript
vue 遮罩层阻止默认滚动事件操作
2020/07/28 Javascript
Python二叉搜索树与双向链表转换实现方法
2016/04/29 Python
常见python正则用法的简单实例
2016/06/21 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
2017/07/07 Python
解析Python中的eval()、exec()及其相关函数
2017/12/20 Python
详谈python在windows中的文件路径问题
2018/04/28 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
2020/04/22 Python
PyTorch 中的傅里叶卷积实现示例
2020/12/11 Python
linux面试题参考答案(4)
2014/09/21 面试题
标准的毕业生自荐信
2014/04/20 职场文书
学校综治宣传月活动总结
2014/07/02 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
2014年客房部工作总结
2014/11/22 职场文书
酒店工程部经理岗位职责
2015/04/09 职场文书
在redisCluster中模糊获取key方式
2021/07/09 Redis