手写一个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生成验证码实例
Aug 21 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
Jan 04 Python
CentOS 7下安装Python3.6 及遇到的问题小结
Nov 08 Python
Python3 实现文件批量重命名示例代码
Jun 03 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
Jun 26 Python
PIL图像处理模块paste方法简单使用详解
Jul 17 Python
python 接口实现 供第三方调用的例子
Aug 13 Python
Python爬虫小例子——爬取51job发布的工作职位
Jul 10 Python
详解如何在PyCharm控制台中输出彩色文字和背景
Aug 17 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
Sep 16 Python
Python self用法详解
Nov 28 Python
Jupyter notebook 输出部分显示不全的解决方案
Apr 24 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
Zend Studio (eclipse)使用速度优化方法
2011/03/23 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
2013/06/21 PHP
使用PHP+AJAX让WordPress动态加载文章的教程
2015/12/11 PHP
基于laravel where的高级使用方法
2019/10/10 PHP
Thinkphp框架+Layui实现图片/文件上传功能分析
2020/02/07 PHP
Js中sort()方法的用法
2006/11/04 Javascript
htm调用JS代码
2007/03/15 Javascript
用显卡加速,轻松把笔记本打造成取暖器的办法!
2013/04/17 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
textarea 控制输入字符字节数(示例代码)
2013/12/27 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
2014/02/12 Javascript
常规表格多表头查询示例
2014/02/21 Javascript
JavaScript中的this关键字使用方法总结
2015/03/13 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
Vue.js中的图片引用路径的方式
2017/07/28 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
layui弹出层按钮提交iframe表单的方法
2018/08/20 Javascript
解决vue无法设置滚动位置的问题
2018/10/07 Javascript
微信小程序实现点击效果
2019/06/21 Javascript
jQuery HTML css()方法与css类实例详解
2020/05/20 jQuery
跟老齐学Python之从if开始语句的征程
2014/09/14 Python
python实现合并两个数组的方法
2015/05/16 Python
python 实现对文件夹内的文件排序编号
2018/04/12 Python
对numpy中向量式三目运算符详解
2018/10/31 Python
用xpath获取指定标签下的所有text的实例
2019/01/02 Python
python nmap实现端口扫描器教程
2020/05/28 Python
tensorflow 大于某个值为1,小于为0的实例
2020/06/30 Python
python 动态渲染 mysql 配置文件的示例
2020/11/20 Python
Mavi牛仔裤美国官网:土耳其著名牛仔品牌
2016/09/24 全球购物
万户网络JAVA程序员岗位招聘笔试试卷
2013/01/08 面试题
卫生巾广告词
2014/03/18 职场文书
森林防火宣传标语
2014/06/27 职场文书
2015年导购员工作总结
2015/04/25 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
vue响应式原理与双向数据的深入解析
2021/06/04 Vue.js
Win11怎么解除儿童账号限制?Win11解除微软儿童账号限制方法
2022/07/07 数码科技