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 相关文章推荐
node.js获取参数的常用方法(总结)
May 29 Python
Python中动态检测编码chardet的使用教程
Jul 06 Python
Python编程之变量赋值操作实例分析
Jul 24 Python
python调用java的jar包方法
Dec 15 Python
在python下读取并展示raw格式的图片实例
Jan 24 Python
Python中使用双下划线防止类属性被覆盖问题
Jun 27 Python
Python matplotlib学习笔记之坐标轴范围
Jun 28 Python
python实现读取excel文件中所有sheet操作示例
Aug 09 Python
Django多数据库联用实现方法解析
Nov 12 Python
Django restful framework生成API文档过程详解
Nov 12 Python
pandas针对excel处理的实现
Jan 15 Python
Python答题卡识别并给出分数的实现代码
Jun 22 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 DataGrid 实现代码
2009/08/12 PHP
详解php的socket通信
2015/08/11 PHP
PHP正则表达式入门教程(推荐)
2016/05/18 PHP
让textarea控件的滚动条怎是位与最下方
2007/04/20 Javascript
JavaScript 基础问答三
2008/12/03 Javascript
jQuery 页面载入进度条实现代码
2009/02/08 Javascript
编写高性能的JavaScript 脚本的加载与执行
2010/04/19 Javascript
JavaScript对象和字串之间的转换实例探讨
2013/04/21 Javascript
Node.js的包详细介绍
2015/01/14 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
2016/03/08 Javascript
JavaScript 浏览器兼容性总结及常用浏览器兼容性分析
2016/03/30 Javascript
js实现常用排序算法
2016/08/09 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
用vue和node写的简易购物车实现
2017/04/25 Javascript
Angular中自定义Debounce Click指令防止重复点击
2017/07/26 Javascript
微信小程序自定义组件
2017/08/16 Javascript
解决jquery appaend元素中id绑定事件失效的问题
2017/09/12 jQuery
详解Vue-cli webpack移动端自动化构建rem问题
2018/04/07 Javascript
nodejs实现聊天机器人功能
2019/09/19 NodeJs
如何解决vue在ios微信&quot;复制链接&quot;功能问题
2020/03/26 Javascript
浅谈python配置与使用OpenCV踩的一些坑
2018/04/02 Python
django小技巧之html模板中调用对象属性或对象的方法
2018/11/30 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
HTML5声音录制/播放功能的实现代码
2018/05/03 HTML / CSS
希腊香水和化妆品购物网站:Parfimo.gr
2019/10/03 全球购物
印度领先的眼镜电子商务网站:Lenskart
2019/12/16 全球购物
教师研修随笔感言
2014/01/23 职场文书
市三好学生主要事迹
2014/01/28 职场文书
五一劳动节活动记录
2014/03/23 职场文书
小学红领巾广播稿(3篇)
2014/09/13 职场文书
2014年行政后勤工作总结
2014/12/06 职场文书
2014年校长工作总结
2014/12/11 职场文书
志愿者事迹材料
2014/12/26 职场文书
通知函的格式
2015/04/27 职场文书
导游词之扬州大明寺
2019/10/09 职场文书
css3实现的加载动画效果
2021/04/07 HTML / CSS