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基于mysql实现的简单队列以及跨进程锁实例详解
Jul 07 Python
详解在Python和IPython中使用Docker
Apr 28 Python
你真的了解Python的random模块吗?
Dec 12 Python
使用Python实现一个栈判断括号是否平衡
Aug 23 Python
python实现给scatter设置颜色渐变条colorbar的方法
Dec 13 Python
Python安装与基本数据类型教程详解
May 29 Python
Python实现微信翻译机器人的方法
Aug 13 Python
pycharm 中mark directory as exclude的用法详解
Feb 14 Python
Python中if有多个条件处理方法
Feb 26 Python
Python多线程thread及模块使用实例
Apr 28 Python
详解pandas apply 并行处理的几种方法
Feb 24 Python
Python中的 Set 与 dict
Mar 13 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
2019十大人气国漫
2020/03/13 国漫
php 魔术函数使用说明
2010/02/21 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
2015/08/18 PHP
js用图作提交按钮或超连接
2008/03/26 Javascript
js replace正则表达式应用案例讲解
2013/01/17 Javascript
基于jQuery.Validate验证库知识点的详解
2013/04/26 Javascript
javascript中实现兼容JAVA的hashCode算法代码分享
2020/08/11 Javascript
JavaScript中获取样式的原生方法小结
2014/10/08 Javascript
node.js中的fs.utimes方法使用说明
2014/12/15 Javascript
js插件YprogressBar实现漂亮的进度条效果
2015/04/20 Javascript
JavaScript中Number.MIN_VALUE属性的使用示例
2015/06/04 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
JQuery的attr 与 val区别
2016/06/12 Javascript
删除table表格行的实例讲解
2017/09/21 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
2017/12/12 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
angularJS的radio实现单项二选一的使用方法
2018/02/28 Javascript
利用js实现前后台传送Json的示例代码
2018/03/29 Javascript
JS根据json数组多个字段排序及json数组常用操作
2019/06/06 Javascript
微信小程序实现滑动操作代码
2020/04/23 Javascript
Openlayers+EasyUI Tree动态实现图层控制
2020/09/28 Javascript
python读取json文件并将数据插入到mongodb的方法
2015/03/23 Python
Python实现发送与接收邮件的方法详解
2018/03/28 Python
python调用自定义函数的实例操作
2019/06/26 Python
Python Web框架之Django框架cookie和session用法分析
2019/08/16 Python
python 如何停止一个死循环的线程
2020/11/24 Python
数据库的约束含义
2012/09/09 面试题
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
机电一体化专业推荐信
2013/12/03 职场文书
银行职员个人的工作自我评价
2014/02/15 职场文书
亲子拓展活动方案
2014/02/20 职场文书
不错的求职信范文
2014/07/20 职场文书
音乐教师个人总结
2015/02/06 职场文书
图文详解Nginx版本平滑升级方案
2021/09/15 Servers
基于Apache Hudi在Google云构建数据湖平台的思路详解
2022/04/07 Servers