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程序中的运用
Mar 02 Python
python 换位密码算法的实例详解
Jul 19 Python
python读取视频流提取视频帧的两种方法
Oct 22 Python
java中两个byte数组实现合并的示例
May 09 Python
pycharm下查看python的变量类型和变量内容的方法
Jun 26 Python
python保存网页图片到本地的方法
Jul 24 Python
tensorflow的计算图总结
Jan 12 Python
利用PyQt中的QThread类实现多线程
Feb 18 Python
Python 实现敏感目录扫描的示例代码
May 21 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
Nov 19 Python
Python排序函数的使用方法详解
Dec 11 Python
如何用Matlab和Python读取Netcdf文件
Feb 19 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检测用户当前使用的浏览器是否为IE浏览器
2013/12/03 PHP
PHP中静态变量的使用方法实例分析
2016/12/01 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
2015/11/24 Javascript
基于Marquee.js插件实现的跑马灯效果示例
2017/01/25 Javascript
Jquery实现跨域异步上传文件总结
2017/02/03 Javascript
jQuery EasyUI Accordion可伸缩面板组件使用详解
2017/02/28 Javascript
layui导航栏实现代码
2017/05/19 Javascript
vue2.0设置proxyTable使用axios进行跨域请求的方法
2017/10/19 Javascript
Node.js使用cookie保持登录的方法
2018/05/11 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
微信小程序如何刷新当前界面的实现方法
2019/06/07 Javascript
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
2019/08/06 Javascript
Vue 解决多级动态面包屑导航的问题
2019/11/04 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
2020/05/10 Javascript
VSCode插件安装完成后的配置(常用配置)
2020/08/24 Javascript
echarts浮动显示单位的实现方法示例
2020/12/04 Javascript
JS相册图片抖动放大展示效果的示例代码
2021/01/29 Javascript
python 读写txt文件 json文件的实现方法
2016/10/22 Python
Python2.7+pytesser实现简单验证码的识别方法
2017/12/29 Python
详解Tensorflow数据读取有三种方式(next_batch)
2018/02/01 Python
为什么入门大数据选择Python而不是Java?
2018/03/07 Python
PyQt5每天必学之关闭窗口
2018/04/19 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
深入浅析css3 border-image边框图像详解
2015/11/24 HTML / CSS
某公司面试题
2012/03/05 面试题
大学毕业生通用求职信
2013/09/28 职场文书
企业内部培训方案
2014/02/04 职场文书
2014中考励志标语
2014/06/05 职场文书
法定代表人资格证明书
2014/09/11 职场文书
2015教师个人德育工作总结
2015/07/22 职场文书
2015年物业公司保洁工作总结
2015/10/22 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书
golang中字符串MD5生成方式总结
2021/07/04 Golang
Vite + React从零开始搭建一个开源组件库
2022/06/25 Javascript