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 相关文章推荐
Pyhthon中使用compileall模块编译源文件为pyc文件
Apr 28 Python
简单讲解Python中的数字类型及基本的数学计算
Mar 11 Python
python 执行shell命令并将结果保存的实例
May 11 Python
详解Python发送email的三种方式
Oct 18 Python
Python中的Socket 与 ScoketServer 通信及遇到问题解决方法
Apr 01 Python
Django 实现图片上传和显示过程详解
Jul 18 Python
django之对FileField字段的upload_to的设定方法
Jul 28 Python
将python2.7添加进64位系统的注册表方式
Nov 20 Python
使用 Python 写一个简易的抽奖程序
Dec 08 Python
tensorflow 分类损失函数使用小记
Feb 18 Python
Django nginx配置实现过程详解
Sep 10 Python
python基础之错误和异常处理
Oct 24 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中file_get_contents与curl性能比较分析
2014/11/08 PHP
基于JQuery+PHP编写砸金蛋中奖程序
2015/09/08 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
javascript encodeURI和encodeURIComponent的比较
2010/04/03 Javascript
基于jquery的仿百度的鼠标移入图片抖动效果
2010/09/17 Javascript
js常用排序实现代码
2010/12/28 Javascript
js如何调用qq互联api实现第三方登录
2014/03/28 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
javascript将异步校验表单改写为同步表单
2015/01/27 Javascript
Javascript中使用parseInt函数需要注意的问题
2015/04/02 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
详解jQuery UI库中文本输入自动补全功能的用法
2016/04/23 Javascript
Bootstrap前端开发案例二
2016/06/17 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
Vuex实现计数器以及列表展示效果
2018/03/10 Javascript
vue中子组件的methods中获取到props中的值方法
2018/08/27 Javascript
简单了解JS打开url的方法
2020/02/21 Javascript
[54:08]LGD女子刀塔学院 DOTA2炼金术士教学
2014/01/09 DOTA
Python关于excel和shp的使用在matplotlib
2019/01/03 Python
对Django 转发和重定向的实例详解
2019/08/06 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
Python request使用方法及问题总结
2020/04/26 Python
Python如何输出百分比
2020/07/31 Python
浅析Python中字符串的intern机制
2020/10/03 Python
Python的collections模块真的很好用
2021/03/01 Python
CSS3的Border-radius轻松制作圆角
2012/12/24 HTML / CSS
Html5 FileReader实现即时上传图片功能实例代码
2014/09/01 HTML / CSS
马来西亚银饰品牌:JEOEL
2017/12/15 全球购物
信息工程学院毕业生推荐信
2013/11/05 职场文书
无故旷工检讨书
2014/01/26 职场文书
会务接待方案
2014/02/27 职场文书
平安校园建设方案
2014/05/02 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
拾金不昧表扬信
2015/01/16 职场文书