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实现带验证码网站的自动登陆实现代码
Jan 12 Python
Python实现方便使用的级联进度信息实例
May 05 Python
详解Python中expandtabs()方法的使用
May 18 Python
在Python的Flask框架中验证注册用户的Email的方法
Sep 02 Python
python异常和文件处理机制详解
Jul 19 Python
TensorFlow 滑动平均的示例代码
Jun 19 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
教你利用Python玩转histogram直方图的五种方法
Jul 30 Python
python组合无重复三位数的实例
Nov 13 Python
Python网络爬虫之爬取微博热搜
Apr 18 Python
Django REST framework 视图和路由详解
Jul 19 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
Jan 16 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
PHP 第三节 变量介绍
2012/04/28 PHP
PHP开发框架Laravel数据库操作方法总结
2014/09/03 PHP
php上传后台无法收到数据解决方法
2019/10/28 PHP
js计算页面刷新的次数
2009/07/20 Javascript
jquery each()源代码
2011/02/14 Javascript
js自定义事件及事件交互原理概述(二)
2013/02/01 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
2013/11/03 Javascript
jquery ajax中使用jsonp的限制解决方法
2013/11/22 Javascript
JS中类或对象的定义说明
2014/03/10 Javascript
js动态添加表格数据使用insertRow和insertCell实现
2014/05/22 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
js仿土豆网带缩略图的焦点图片切换效果实现方法
2015/02/23 Javascript
详解微信小程序 wx.uploadFile 的编码坑
2017/01/23 Javascript
详解webpack引用jquery(第三方模块)的三种办法
2019/08/21 jQuery
《javascript设计模式》学习笔记四:Javascript面向对象程序设计链式调用实例分析
2020/04/07 Javascript
[04:53]DOTA2英雄基础教程 祈求者
2014/01/03 DOTA
Python isinstance判断对象类型
2008/09/06 Python
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
2013/11/28 Python
python实现的重启关机程序实例
2014/08/21 Python
python中字典(Dictionary)用法实例详解
2015/05/30 Python
Python实现简单截取中文字符串的方法
2015/06/15 Python
Python使用redis pool的一种单例实现方式
2016/04/16 Python
Python 实现自动完成A4标签排版打印功能
2020/04/09 Python
Keras自定义实现带masking的meanpooling层方式
2020/06/16 Python
详解python polyscope库的安装和例程
2020/11/13 Python
总结30个CSS3选择器
2017/04/13 HTML / CSS
UGG英国官方网站:UGG UK
2018/02/08 全球购物
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
医学检验专业大学生求职信
2013/11/18 职场文书
社团活动策划书范文
2014/01/09 职场文书
高校教师思想汇报
2014/01/11 职场文书
个人买房协议书范本
2014/10/06 职场文书
老人与海读书笔记
2015/06/26 职场文书
Pytorch 如何实现常用正则化
2021/05/27 Python
用Python将GIF动图分解成多张静态图片
2021/06/11 Python