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服务器端收发请求的实现代码
Sep 29 Python
简单介绍Python中的len()函数的使用
Apr 07 Python
在Python中使用pngquant压缩png图片的教程
Apr 09 Python
python flask 多对多表查询功能
Jun 25 Python
Python调用系统底层API播放wav文件的方法
Aug 11 Python
python通过getopt模块如何获取执行的命令参数详解
Dec 29 Python
python开发游戏的前期准备
May 05 Python
Python imread、newaxis用法详解
Nov 04 Python
Django Xadmin多对多字段过滤实例
Apr 07 Python
Python垃圾回收机制三种实现方法
Apr 27 Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
Jun 30 Python
Python趣味爬虫之用Python实现智慧校园一键评教
May 28 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表单提交表单名称含有点号(.)则会被转化为下划线(_)
2011/12/14 PHP
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
2013/01/11 PHP
解析argc argv在php中的应用
2013/06/24 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
根据分辨率不同,调用不同的css文件
2006/08/25 Javascript
学习js所必须要知道的一些
2007/03/07 Javascript
js类中获取外部函数名的方法
2007/08/19 Javascript
学习面向对象之面向对象的基本概念:对象和其他基本要素
2010/11/30 Javascript
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
Node.js实现在目录中查找某个字符串及所在文件
2014/09/03 Javascript
JavaScript计算两个日期时间段内日期的方法
2015/03/16 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
一个php+js实时显示时间问题
2015/10/12 Javascript
javascript如何定义对象数组
2016/06/07 Javascript
jQuery.datatables.js插件用法及api实例详解
2016/10/28 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
vue增删改查的简单操作
2017/07/15 Javascript
jQuery上传插件webupload使用方法
2017/08/01 jQuery
BootstrapTable加载按钮功能实例代码详解
2017/09/22 Javascript
使用selenium抓取淘宝的商品信息实例
2018/02/06 Javascript
Vue实现背景更换颜色操作
2020/07/17 Javascript
python 实现倒排索引的方法
2018/12/25 Python
Python生成一个迭代器的实操方法
2019/06/18 Python
python导入pandas具体步骤方法
2019/06/23 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
利用python实现.dcm格式图像转为.jpg格式
2020/01/13 Python
html5+css3进度条倒计时动画特效代码【推荐】
2016/03/08 HTML / CSS
里程积分管理买卖交换平台:Points.com
2017/01/13 全球购物
类如何去实现接口
2013/12/19 面试题
软件测试笔试题
2012/10/25 面试题
餐饮加盟计划书
2014/01/10 职场文书
化学工程专业求职信
2014/08/10 职场文书
三峡导游词
2015/01/31 职场文书