Python迭代器定义与简单用法分析


Posted in Python onApril 30, 2018

本文实例讲述了Python迭代器定义与简单用法。分享给大家供大家参考,具体如下:

一、什么是迭代器

迭代,顾名思义就是重复做一些事很多次(就现在循环中做的那样)。迭代器是实现了__next__()方法的对象(这个方法在调用时不需要任何参数),它是访问可迭代序列的一种方式,通常其从序列的第一个元素开始访问,直到所有的元素都被访问才结束。 [注意]:迭代器只能前进不能后退

[迭代器的优点]:

使用迭代器不要求事先准备好整个迭代过程中的所有元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后元素可以不存在或者被销毁。因此迭代器适合遍历一些数量巨大甚至无限的序列。

 二、创建迭代器

A、使用内建的工厂函数iter(iterable)可以将可迭代序列转换为迭代器

a=[1,2,3,4]
b=(1,2,3)
str='Tomwenxing'
print(iter(a))
print(iter(b))
print(iter(str))

运行结果:

<listiterator object at 0x0000000001D6D550>
<tupleiterator object at 0x0000000001D6D550>
<iterator object at 0x0000000001D6D550>

B、自定义迭代器

•Python中迭代器的本质上每次调用__next__()方法都返回下一个元素或抛出StopIteration的容器对象

•由于Python中没有“迭代器”这个类,因此具有以下两个特性的类都可以称为“迭代器”类:

1、有__next__()方法,返回容器的下一个元素或抛出StopIteration异常

2、有__iter__()方法,返回迭代器本身

#斐波那契数列
class Fabs():
  def __init__(self,max):
    self.max=max
    self.n,self.a,self.b=0,0,1
  def __iter__(self):#定义__iter__方法
    return self
  def __next__(self):#定义__next__方法
    if self.n<self.max:
      tmp=self.b
      self.a,self.b=self.b,self.a+self.b
      #等价于:
      #t=(self.a,self.a+self.b)
      #self.a=t[0]
      #self.b=t[1]
      self.n+=1
      return tmp
    raise StopIteration
print(Fabs(5))
for item in Fabs(10):
  print(item,end=' ')

运行结果:

<__main__.Fabs object at 0x00000000023F9278>
1 1 2 3 5 8 13 21 34 55

三、迭代器的方法

1.iter.__next__():返回迭代器的下一个元素,但没有下一个元素时抛出StopIteration异常

list=[1,2,3,4]
list=iter(list)
print(list.__next__())
print(list.__next__())
print(list.__next__())
print(list.__next__())
print(list.__next__())

运行结果:

Traceback (most recent call last):
  File "E:\py3Demo\Hello\iterDemo.py", line 7, in <module>
    print(list.__next__())
StopIteration
1
2
3
4

2.iter.__iter__():返回迭代器对象本身

list=[1,2,3,4]
list=iter(list)
print(list.__iter__())

运行结果:

<list_iterator object at 0x0000000001D6F208>

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python操作json数据的一个简单例子
Apr 17 Python
python实现定时播放mp3
Mar 29 Python
Python映射拆分操作符用法实例
May 19 Python
Python实现查找系统盘中需要找的字符
Jul 14 Python
Python安装Flask环境及简单应用示例
May 03 Python
用pyqt5 给按钮设置图标和css样式的方法
Jun 24 Python
Python 200行代码实现一个滑动验证码过程详解
Jul 11 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
Jul 23 Python
python3格式化字符串 f-string的高级用法(推荐)
Mar 04 Python
python实现微信打飞机游戏
Mar 24 Python
tensorflow学习笔记之tfrecord文件的生成与读取
Mar 31 Python
Python字典和列表性能之间的比较
Jun 07 Python
python 实现在txt指定行追加文本的方法
Apr 29 #Python
Python 实现在文件中的每一行添加一个逗号
Apr 29 #Python
python 把文件中的每一行以数组的元素放入数组中的方法
Apr 29 #Python
详谈python3 numpy-loadtxt的编码问题
Apr 29 #Python
python3.4.3下逐行读入txt文本并去重的方法
Apr 29 #Python
Python使用re模块实现信息筛选的方法
Apr 29 #Python
Python排序算法之选择排序定义与用法示例
Apr 29 #Python
You might like
收音机鉴频器对声音的影响和频偏分析
2021/03/02 无线电
关于IIS php调用com组件的权限问题
2012/01/11 PHP
PHP输出时间差函数代码
2013/01/28 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
2014/04/18 PHP
调试PHP程序的多种方法介绍
2014/11/06 PHP
jQuery版Tab标签切换
2011/03/16 Javascript
表单元素的submit()方法和onsubmit事件应用概述
2013/02/01 Javascript
JS实现判断碰撞的方法
2015/02/11 Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
2015/04/22 Javascript
JS模拟并美化的表单控件完整实例
2015/08/19 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
2016/07/04 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
H5上传本地图片并预览功能
2017/05/08 Javascript
Angular4实现动态添加删除表单输入框功能
2017/08/11 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
JS文件中加载jquery.js的实例代码
2018/05/05 jQuery
Vue实现本地购物车功能
2018/12/05 Javascript
浅谈js中的bind
2019/03/18 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
Bootstrap table 服务器端分页功能实现方法示例
2020/06/01 Javascript
详解Python的Django框架中的templates设置
2015/05/11 Python
python与pycharm有何区别
2020/07/01 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
HTML5重塑Web世界它将如何改变互联网
2012/12/17 HTML / CSS
canvas 绘图时位置偏离的问题解决
2020/09/16 HTML / CSS
全球知名巧克力品牌:Godiva
2016/07/22 全球购物
英国派对礼服和连衣裙购物网站:TFNC London
2018/07/07 全球购物
Prototype如何更新局部页面
2013/03/03 面试题
项目负责人岗位职责
2015/02/15 职场文书
怀孕辞职信怎么写
2015/02/28 职场文书
2015年度招聘工作总结
2015/05/28 职场文书
疾病证明书
2015/06/19 职场文书
任命书格式模板
2015/09/22 职场文书
新店开业策划方案怎么书写?
2019/07/05 职场文书
企业内部管理控制:采购授权审批制度范本
2020/01/19 职场文书
JS实现简单的九宫格抽奖
2022/06/28 Javascript