Python3之手动创建迭代器的实例代码


Posted in Python onMay 22, 2019

迭代器即可以遍历诸如列表,字典及字符串等序列对象甚至自定义对象的对象,其本质就是记录迭代对象中每个元素的位置。迭代过程从第一个元素至最后一个元素,且过程不能回滚或反方向迭代。

两个基本方法iter、next

序列对象可以利用 iter() 直接创建迭代器,并通过 next() 即可迭代迭代器。

利用for循环迭代

S = 'PYTHON'
IT = iter(S)
for it in IT:
  print(it)

示例结果:

P
Y
T
H
O
N

利用next()迭代

S = 'PYTHON'
IT = iter(S)
print(next(IT))
print(next(IT))
print(next(IT))
print(next(IT))
print(next(IT))
print(next(IT))

示例结果:

P
Y
T
H
O
N

当我们使用next()迭代时,如果迭代了次数超过了迭代器中的元素个数就会引发 StopIteration ,由此我们可以利用 while 循环迭代,并不断捕捉迭代结束的异常完成for循环的迭代过程。

S = 'PYTHON'
IT = iter(S)
while True:
  try:
    print(next(IT))
  except StopIteration:
    break

P
Y
T
H
O
N

手动构建迭代器

把一个类作为一个迭代器使用需要在类中实现两个方法 iter () 与 next () 。 iter () 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了 next () 方法并通过 StopIteration 异常标识迭代的完成。 next () 方法(Python 2 里是 next())会返回下一个迭代器对象。下面这个类构造了一个迭代器接受一个可迭代的数字,每次迭代都返回上一次迭代结果的平方,当迭代结果大于 9999999999999 时抛出异常。利用该类创建示例对数字2进行平方和迭代。

class IT_SQUARE:
  def __init__(self, x):
    self.x = x

  def __next__(self):
    self.x = self.x ** 2
    if self.x > 9999999999999:
      raise StopIteration
    
    else:
      return self.x

  def __iter__(self):
    return self
 
IT1 = IT_SQUARE(2)
 
while True:
  try:
    print(IT1.__next__())
  except StopIteration:
    break

示例结果

4
16
256
65536
4294967296

总结

以上所述是小编给大家介绍的Python3之手动创建迭代器的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python获取电脑硬件信息及状态的实现方法
Aug 29 Python
Python urllib、urllib2、httplib抓取网页代码实例
May 09 Python
Python的GUI框架PySide的安装配置教程
Feb 16 Python
使用Python进行二进制文件读写的简单方法(推荐)
Sep 12 Python
python非递归全排列实现方法
Apr 10 Python
Python sqlite3事务处理方法实例分析
Jun 19 Python
Python为何不能用可变对象作为默认参数的值
Jul 01 Python
python解释器spython使用及原理解析
Aug 24 Python
python实现截取屏幕保存文件,删除N天前截图的例子
Aug 27 Python
PyQt5实现登录页面
May 30 Python
python初步实现word2vec操作
Jun 09 Python
详解Python+OpenCV绘制灰度直方图
Mar 22 Python
PyTorch搭建一维线性回归模型(二)
May 22 #Python
PyTorch基本数据类型(一)
May 22 #Python
PyTorch搭建多项式回归模型(三)
May 22 #Python
pytorch使用Variable实现线性回归
May 21 #Python
Python面向对象进阶学习
May 21 #Python
谈一谈基于python的面向对象编程基础
May 21 #Python
python字符串和常用数据结构知识总结
May 21 #Python
You might like
信用卡效验程序
2006/10/09 PHP
PHP 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
php中并发读写文件冲突的解决方案
2013/10/25 PHP
PHP中的多行字符串传递给JavaScript的两种方法
2014/06/19 PHP
php生成RSS订阅的方法
2015/02/13 PHP
php阿拉伯数字转中文人民币大写
2015/12/21 PHP
CodeIgniter辅助之第三方类库third_party用法分析
2016/01/20 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
Javascript中Event属性搜集整理
2013/09/17 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
详解Angular6学习笔记之主从组件
2018/09/05 Javascript
this在vue和小程序中的使用详解
2019/01/28 Javascript
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
JS实现长图上下滚动效果
2020/03/19 Javascript
浅谈vue权限管理实现及流程
2020/04/23 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
2020/10/09 jQuery
Python面向对象特殊成员
2017/04/24 Python
Python理解递归的方法总结
2019/01/28 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
2019/07/31 Python
详解Django CAS 解决方案
2019/10/30 Python
Python模块_PyLibTiff读取tif文件的实例
2020/01/13 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
Original Penguin美国官网:布拉德皮特、强尼德普喜爱的服装品牌
2016/10/25 全球购物
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
Super-Pharm波兰:药房和香水在一个地方
2020/08/18 全球购物
校园文明倡议书
2014/05/16 职场文书
教师考核材料
2014/05/21 职场文书
团队激励口号
2014/06/06 职场文书
2014年幼儿园重阳节活动方案
2014/09/16 职场文书
vue3获取当前路由地址
2022/02/18 Vue.js