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之大话题小函数(1)
Oct 10 Python
Python的另外几种语言实现
Jan 29 Python
python中实现字符串翻转的方法
Jul 11 Python
对Python 除法负数取商的取整方式详解
Dec 12 Python
Python简单过滤字母和数字的方法小结
Jan 09 Python
python登录WeChat 实现自动回复实例详解
May 28 Python
Python数据可视化实现正态分布(高斯分布)
Aug 21 Python
Pytorch 实现数据集自定义读取
Jan 18 Python
Python实现随机生成任意数量车牌号
Jan 21 Python
OpenCV-Python实现人脸美白算法的实例
Jun 11 Python
教你使用Python获取QQ音乐某个歌手的歌单
Apr 03 Python
Pillow图像处理库安装及使用
Apr 12 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
使用HMAC-SHA1签名方法详解
2013/06/26 PHP
php计算两个日期相差天数的方法
2015/03/14 PHP
PHP读取大文件末尾N行的高效方法推荐
2016/06/03 PHP
php str_getcsv把字符串解析为数组的实现方法
2017/04/05 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
2019/05/09 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
2019/12/12 PHP
如何通过Apache在本地配置多个虚拟主机
2020/07/29 PHP
用window.location.href实现刷新另个框架页面
2007/03/07 Javascript
Iframe实现跨浏览器自适应高度解决方法
2014/09/02 Javascript
JavaScript实现强制重定向至HTTPS页面
2015/06/10 Javascript
使用Raygun来自动追踪AngularJS中的异常
2015/06/23 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
2017/04/01 Javascript
详解Vue中一种简易路由传参办法
2017/09/15 Javascript
jQuery实现ajax回调函数带入参数的方法示例
2018/06/26 jQuery
node实现socket链接与GPRS进行通信的方法
2019/05/20 Javascript
js实现带积分弹球小游戏
2020/07/21 Javascript
[00:12]DAC2018 Miracle-站上中单舞台,他能否再写奇迹?
2018/04/06 DOTA
[49:41]NB vs NAVI Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
win10下tensorflow和matplotlib安装教程
2018/09/19 Python
Django 解决新建表删除后无法重新创建等问题
2020/05/21 Python
使用Keras画神经网络准确性图教程
2020/06/15 Python
python statsmodel的使用
2020/12/21 Python
通用的Django注册功能模块实现方法
2021/02/05 Python
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
高中生毕业学习总结的自我评价
2013/11/14 职场文书
教育技术职业规划范文
2014/03/04 职场文书
创意广告词
2014/03/17 职场文书
高一新生军训方案
2014/05/12 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
领导欢迎词致辞
2015/01/23 职场文书
项目经理岗位职责
2015/01/31 职场文书
刑事案件上诉状
2015/05/23 职场文书
Java基础之详解HashSet的使用方法
2021/06/30 Java/Android