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 相关文章推荐
linux系统使用python监控apache服务器进程脚本分享
Jan 15 Python
python strip() 函数和 split() 函数的详解及实例
Feb 03 Python
简单谈谈Python中的json与pickle
Jul 19 Python
Python实现图片转字符画的示例代码
Aug 21 Python
python批量导入数据进Elasticsearch的实例
May 30 Python
使用python3构建文件传输的方法
Feb 13 Python
python @classmethod 的使用场合详解
Aug 23 Python
python脚本监控logstash进程并邮件告警实例
Apr 28 Python
Django Channel实时推送与聊天的示例代码
Apr 30 Python
如何基于Python和Flask编写Prometheus监控
Nov 25 Python
详解pycharm自动import所需的库的操作方法
Nov 30 Python
next在python中返回迭代器的实例方法
Dec 15 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
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
hadoop中一些常用的命令介绍
2013/06/19 PHP
如何给phpcms v9增加类似于phpcms 2008中的关键词表
2013/07/01 PHP
一个图片地址分解程序(用于PHP小偷程序)
2014/08/23 PHP
跟我学Laravel之配置Laravel
2014/10/15 PHP
php构造函数与析构函数
2016/04/23 PHP
JavaScript开发时的五个注意事项
2007/12/08 Javascript
Javascript Global对象
2009/08/13 Javascript
jQuery boxy弹出层插件中文演示及使用讲解
2011/02/24 Javascript
动态加载脚本提升javascript性能
2014/02/24 Javascript
深入讲解AngularJS中的自定义指令的使用
2015/06/18 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
javascript html实现网页版日历代码
2016/03/08 Javascript
JS实现的颜色实时渐变效果完整实例
2016/03/25 Javascript
vue组件父子间通信详解(三)
2017/11/07 Javascript
angularjs 缓存的使用详解
2018/03/19 Javascript
使用原生js编写一个简单的框选功能方法
2019/05/13 Javascript
JavaScript ES6 Class类实现原理详解
2020/05/08 Javascript
python基础教程之数字处理(math)模块详解
2014/03/25 Python
使用python遍历指定城市的一周气温
2017/03/31 Python
python 除法保留两位小数点的方法
2018/07/16 Python
用Python实现BP神经网络(附代码)
2019/07/10 Python
Python 实现训练集、测试集随机划分
2020/01/08 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
2020/02/28 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
2020/07/27 Python
Python如何输出警告信息
2020/07/30 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
EJB2和EJB3在架构上的不同点
2014/09/29 面试题
“三支一扶”支教教师思想汇报
2014/09/13 职场文书
乡镇党员群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
肖申克救赎观后感
2015/06/02 职场文书
详解Redis复制原理
2021/06/04 Redis
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL
Win11黑色桌面背景怎么办?Win11黑色壁纸解决方法汇总
2022/04/05 数码科技
mysql函数之截取字符串的实现
2022/08/14 MySQL