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创建文件和追加文件内容实例
Oct 21 Python
利用Python学习RabbitMQ消息队列
Nov 30 Python
Python max内置函数详细介绍
Nov 17 Python
Python绑定方法与非绑定方法详解
Aug 18 Python
python画一个玫瑰和一个爱心
Aug 18 Python
Python发展简史 Python来历
May 14 Python
如何用Python制作微信好友个性签名词云图
Jun 28 Python
python实现两个dict合并与计算操作示例
Jul 01 Python
Python 寻找局部最高点的实现
Dec 05 Python
将自己的数据集制作成TFRecord格式教程
Feb 17 Python
有关pycharm登录github时有的时候会报错connection reset的问题
Sep 15 Python
如何使用python写截屏小工具
Sep 29 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
PHP-FPM 的管理和配置详解
2019/02/17 PHP
PHP+redis实现微博的推模型案例分析
2019/07/10 PHP
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
javascript中的throttle和debounce浅析
2014/06/06 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
跟我学习javascript的全局变量
2015/11/16 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
jQuery+HTML5+CSS3制作支持响应式布局时间轴插件
2016/08/10 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
2016/09/19 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
2017/08/23 jQuery
JavaScript中使用参数个数实现重载功能
2017/09/01 Javascript
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
说说Vuex的getters属性的具体用法
2019/04/15 Javascript
Vue keepAlive 数据缓存工具实现返回上一个页面浏览的位置
2019/05/10 Javascript
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
Python浅拷贝与深拷贝用法实例
2015/05/09 Python
利用 python 对目录下的文件进行过滤删除
2017/12/27 Python
Python实现从log日志中提取ip的方法【正则提取】
2018/03/31 Python
值得收藏的10道python 面试题
2019/04/15 Python
django数据库自动重连的方法实例
2019/07/21 Python
使用python编写一个语音朗读闹钟功能的示例代码
2020/07/14 Python
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
美国领先的礼品卡网站:GiftCards.com
2016/11/02 全球购物
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
请写出 float x 与"零值"比较的 if 语句
2016/01/04 面试题
毕业生求职简历的自我评价
2013/10/23 职场文书
旅游管理毕业生自荐书
2014/02/02 职场文书
2014年冬季防火方案
2014/05/21 职场文书
有关环保的标语
2014/06/13 职场文书
见习报告格式要求
2014/11/04 职场文书
运动会表扬稿范文
2015/05/05 职场文书
小学生暑假安全保证书
2015/07/13 职场文书
7个你应该知道的JS原生错误类型
2021/04/29 Javascript
解决ObjectMapper.convertValue() 遇到的一些问题
2021/06/30 Java/Android