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机器学习理论与实战(六)支持向量机
Jan 19 Python
python使用pdfminer解析pdf文件的方法示例
Dec 20 Python
python实现得到当前登录用户信息的方法
Jun 21 Python
Numpy 中的矩阵求逆实例
Aug 26 Python
关于Python中的向量相加和numpy中的向量相加效率对比
Aug 26 Python
python自动识别文本编码格式代码
Dec 26 Python
Python sqlite3查询操作过程解析
Feb 20 Python
python3中的logging记录日志实现过程及封装成类的操作
May 12 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
May 12 Python
Django实现任意文件上传(最简单的方法)
Jun 03 Python
5 分钟读懂Python 中的 Hook 钩子函数
Dec 09 Python
Django中template for如何使用方法
Jan 31 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输出1000以内质数(素数)示例
2014/02/16 PHP
PHP如何使用Memcached
2016/04/05 PHP
PHP实现验证码校验功能
2017/11/16 PHP
javascript淡入淡出效果的实现思路
2012/03/31 Javascript
浅谈JavaScript之事件绑定
2013/07/08 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
js控制input框只读实现示例
2014/01/20 Javascript
微信小程序 教程之引用
2016/10/18 Javascript
Angular2学习教程之TemplateRef和ViewContainerRef详解
2017/05/25 Javascript
Angular 4依赖注入学习教程之InjectToken的使用(八)
2017/06/04 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
Nuxt.js实现校验访问浏览器类型的中间件
2018/08/24 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
一篇文章让你搞懂JavaScript 原型和原型链
2020/11/23 Javascript
Python实现遍历windows所有窗口并输出窗口标题的方法
2015/03/13 Python
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
Python脚本实现自动将数据库备份到 Dropbox
2017/02/06 Python
python如何获取服务器硬件信息
2017/05/11 Python
Python2.7+pytesser实现简单验证码的识别方法
2017/12/29 Python
转换科学计数法的数值字符串为decimal类型的方法
2018/07/16 Python
解决python3读取Python2存储的pickle文件问题
2018/10/25 Python
对Python3 pyc 文件的使用详解
2019/02/16 Python
pandas计数 value_counts()的使用
2019/06/24 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
python求质数列表的例子
2019/11/24 Python
Python字符串及文本模式方法详解
2020/09/10 Python
Python 实现PS滤镜的旋涡特效
2020/12/03 Python
Ivory Isle Designs美国/加拿大:婚礼和活动文具公司
2018/08/21 全球购物
宣传策划类求职信范文
2014/01/31 职场文书
创业计划书如何编写
2014/02/06 职场文书
政府领导干部个人对照检查材料思想汇报
2014/09/24 职场文书
2015年预备党员自我评价
2015/03/04 职场文书
幼儿园辞职信
2015/05/13 职场文书
寒假致家长的一封信
2015/10/10 职场文书