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中的浅复制与深复制
Jul 02 Python
在python的类中动态添加属性与生成对象
Sep 17 Python
用Python将动态GIF图片倒放播放的方法
Nov 02 Python
Python使用cx_Oracle模块操作Oracle数据库详解
May 07 Python
python 将list转成字符串,中间用符号分隔的方法
Oct 23 Python
Python txt文件加入字典并查询的方法
Jan 15 Python
使用python分析统计自己微信朋友的信息
Jul 19 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
Aug 04 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
Aug 20 Python
Python图像处理库PIL的ImageDraw模块介绍详解
Feb 26 Python
python 爬虫如何正确的使用cookie
Oct 27 Python
python 实现一个简单的线性回归案例
Dec 17 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
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
2020/02/07 PHP
JQuery1.4+ Ajax IE8 内存泄漏问题
2010/10/15 Javascript
jQuery中的jQuery()方法用法分析
2014/12/27 Javascript
jQuery实现contains方法不区分大小写的方法
2015/02/13 Javascript
Bootstrap每天必学之面板
2015/11/30 Javascript
基于javascript简单实现对身份证校验
2021/01/25 Javascript
JS中artdialog弹出框控件之提交表单思路详解
2016/04/18 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
Angular.Js之Scope作用域的学习教程
2017/04/27 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
2020/12/10 Vue.js
js数组的基本使用总结
2021/01/18 Javascript
python益智游戏计算汉诺塔问题示例
2014/03/05 Python
Python命名空间详解
2014/08/18 Python
python爬虫入门教程--利用requests构建知乎API(三)
2017/05/25 Python
Django 使用logging打印日志的实例
2018/04/28 Python
python使用Plotly绘图工具绘制散点图、线形图
2019/04/02 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
基于python实现蓝牙通信代码实例
2019/11/19 Python
python使用SQLAlchemy操作MySQL
2020/01/02 Python
Python 读取xml数据,cv2裁剪图片实例
2020/03/10 Python
python获取linux系统信息的三种方法
2020/10/14 Python
CSS3制作缩略图的详细过程
2016/07/08 HTML / CSS
AmazeUI 模态窗口的实现代码
2020/08/18 HTML / CSS
HTML5在微信内置浏览器下右上角菜单的调整字体导致页面显示错乱的问题
2021/01/19 HTML / CSS
美国花园雕像和家居装饰网上商店:Design Toscano
2019/03/09 全球购物
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
热能动力工程毕业生自荐信
2013/11/07 职场文书
新学期红领巾广播稿
2014/01/14 职场文书
营销与策划专业求职信
2014/06/20 职场文书
2014光棍节单身联谊活动策划书
2014/10/10 职场文书
房屋租赁协议书
2014/10/18 职场文书
2015年高三年级组工作总结
2015/07/21 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
感谢信的技巧及范例
2019/05/15 职场文书
环境保护宣传标语大全!
2019/06/28 职场文书
SpringBoot 整合mongoDB并自定义连接池的示例代码
2022/02/28 MongoDB