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代码做configure文件
Jul 20 Python
Python实现获取磁盘剩余空间的2种方法
Jun 07 Python
对python:threading.Thread类的使用方法详解
Jan 31 Python
Python中函数参数匹配模型详解
Jun 09 Python
python实现通过队列完成进程间的多任务功能示例
Oct 28 Python
pytorch的梯度计算以及backward方法详解
Jan 10 Python
python-sys.stdout作为默认函数参数的实现
Feb 21 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
Feb 26 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
Mar 14 Python
Python GUI库Tkiner使用方法代码示例
Nov 27 Python
浅谈Python数学建模之数据导入
Jun 23 Python
python自动化测试通过日志3分钟定位bug
Nov 20 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 如何获取二维数组中某个key的集合
2014/06/03 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
2015/12/24 PHP
PHP判断是手机端还是PC端 PHP判断是否是微信浏览器
2017/03/15 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
2019/10/17 PHP
javascript中使用replaceAll()函数实现字符替换的方法
2010/12/25 Javascript
读jQuery之三(构建选择器)
2011/06/11 Javascript
关于js数组去重的问题小结
2014/01/24 Javascript
js函数在frame中的相互调用详解
2014/03/03 Javascript
Bootstrap 最常用的JS插件系列总结(图片轮播、标签切换等)
2016/07/14 Javascript
jQuery图片加载显示loading效果
2016/11/04 Javascript
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
2017/06/09 jQuery
微信小程序之页面拦截器的示例代码
2017/09/07 Javascript
NodeJS 实现多语言的示例代码
2018/09/11 NodeJs
利用Angular2的Observables实现交互控制的方法
2018/12/27 Javascript
Javascript实现一朵从含苞到绽放的玫瑰
2019/03/30 Javascript
node实现简单的增删改查接口实例代码
2019/08/22 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
Python中用Spark模块的使用教程
2015/04/13 Python
python使用装饰器和线程限制函数执行时间的方法
2015/04/18 Python
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
python2 与 python3 实现共存的方法
2018/07/12 Python
python 快速把超大txt文件转存为csv的实例
2018/10/26 Python
[原创]Python入门教程4. 元组基本操作
2018/10/31 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
通过python实现windows桌面截图代码实例
2020/01/17 Python
基于Django signals 信号作用及用法详解
2020/03/28 Python
Python建造者模式案例运行原理解析
2020/06/29 Python
python简单实现插入排序实例代码
2020/12/16 Python
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
美国台面电器和厨具品牌:KitchenAid
2019/04/12 全球购物
捷克家电和家具购物网站:OKAY.cz
2020/07/23 全球购物
德国BA保镖药房中文网:Bodyguard Apotheke
2021/03/09 全球购物
优质服务口号
2014/06/11 职场文书
我爱幼儿园演讲稿
2014/09/11 职场文书
小学生学习保证书
2015/02/26 职场文书
Python入门之基础语法详解
2021/05/11 Python