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之用Python计算
Sep 12 Python
Python使用gensim计算文档相似性
Apr 10 Python
Python 正则表达式实现计算器功能
Apr 29 Python
Python实现查找匹配项作处理后再替换回去的方法
Jun 10 Python
Python2和Python3.6环境解决共存问题
Nov 09 Python
python+os根据文件名自动生成文本
Mar 21 Python
Python Opencv任意形状目标检测并绘制框图
Jul 23 Python
Python在cmd上打印彩色文字实现过程详解
Aug 07 Python
python绘制随机网络图形示例
Nov 21 Python
python二维键值数组生成转json的例子
Dec 06 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
Jul 13 Python
经验丰富程序员才知道的8种高级Python技巧
Jul 27 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 基于Yii框架中使用smarty模板的方法详解
2013/06/13 PHP
php calender(日历)二个版本代码示例(解决2038问题)
2013/12/24 PHP
PHP获取短链接跳转后的真实地址和响应头信息的方法
2014/07/25 PHP
php array_merge函数使用需要注意的一个问题
2015/03/30 PHP
PHP 获取ip地址代码汇总
2015/07/05 PHP
Symfony2学习笔记之系统路由详解
2016/03/17 PHP
php设计模式之工厂模式用法经典实例分析
2019/09/20 PHP
JS 判断undefined的实现代码
2009/11/26 Javascript
基于jquery的固定表头和列头的代码
2012/05/03 Javascript
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
javascript中typeof的使用示例
2013/12/19 Javascript
json中换行符的处理方法示例介绍
2014/06/10 Javascript
javascript 兼容各个浏览器的事件
2015/02/04 Javascript
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
2016/11/21 NodeJs
使用jQuery,Angular实现登录界面验证码详解
2017/04/27 jQuery
Angular中$state.go页面跳转并传递参数的方法
2017/05/09 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
vue2.0 + ele的循环表单及验证字段方法
2018/09/18 Javascript
微信小程序 image组件遇到的问题
2019/05/28 Javascript
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
2020/02/10 Javascript
Node.js 中如何收集和解析命令行参数
2021/01/08 Javascript
[03:11]DOTA2上海特锦赛小组赛第一日recap精彩回顾
2016/02/28 DOTA
Python的消息队列包SnakeMQ使用初探
2016/06/29 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
如何不用安装python就能在.NET里调用Python库
2019/07/12 Python
Python接口测试文件上传实例解析
2020/05/22 Python
跑鞋、网球鞋、网球拍、服装及装备:Holabird Sports
2016/09/19 全球购物
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
加拿大时装零售商:Influence U
2018/12/22 全球购物
2015年领导班子工作总结
2015/05/23 职场文书
请客吃饭开场白
2015/06/01 职场文书
驻村工作简报
2015/07/20 职场文书
关于python中模块和重载的问题
2021/11/02 Python
室外天线与收音机天线杆接合方法
2022/04/05 无线电
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
2022/04/13 Python