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字符串替换示例
Apr 24 Python
python3中set(集合)的语法总结分享
Mar 24 Python
Python request设置HTTPS代理代码解析
Feb 12 Python
Python读取视频的两种方法(imageio和cv2)
Apr 15 Python
Python异步操作MySQL示例【使用aiomysql】
May 16 Python
基于python的socket实现单机五子棋到双人对战
Mar 24 Python
python 猴子补丁(monkey patch)
Jun 26 Python
pytorch 图像中的数据预处理和批标准化实例
Jan 15 Python
利用python如何实现猫捉老鼠小游戏
Dec 04 Python
python通过cython加密代码
Dec 11 Python
Python创建简单的神经网络实例讲解
Jan 04 Python
Pytest中skip和skipif的具体使用方法
Jun 30 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数组转xml的代码分享
2015/05/14 PHP
PHP实现基于mysqli的Model基类完整实例
2016/04/08 PHP
php版微信自定义回复功能示例
2016/12/05 PHP
PHP测试框架PHPUnit组织测试操作示例
2018/05/28 PHP
PHP+Ajax实现的检测用户名功能简单示例
2019/02/12 PHP
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
js二维数组定义和初始化的三种方法总结
2014/03/03 Javascript
一个JavaScript递归实现反转数组字符串的实例
2014/10/14 Javascript
对JavaScript中this指针的新理解分享
2015/01/31 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
avalon js实现仿微博拖动图片排序
2015/08/14 Javascript
微信小程序 location API实例详解
2016/10/02 Javascript
获取今天,昨天,本周,上周,本月,上月时间(实例分享)
2017/01/04 Javascript
JS实现的验证身份证及获取地区功能示例
2017/01/16 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
JS的Ajax与后端交互数据的实例
2018/08/08 Javascript
axios全局注册,设置token,以及全局设置url请求网段的方法
2018/09/25 Javascript
nodejs实现百度舆情接口应用示例
2020/02/07 NodeJs
Vue实现图书管理小案例
2020/12/03 Vue.js
python读取word文档的方法
2015/05/09 Python
Python中super()函数简介及用法分享
2016/07/11 Python
python selenium 对浏览器标签页进行关闭和切换的方法
2018/05/21 Python
python 切换root 执行命令的方法
2019/01/19 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
CSS3实现水平居中、垂直居中、水平垂直居中的实例代码
2020/02/27 HTML / CSS
Hotels.com中国区:好订网
2016/08/18 全球购物
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
大学本科毕业生的自我鉴定范文
2013/11/19 职场文书
开工仪式策划方案
2014/05/23 职场文书
教师见习报告范文
2014/11/03 职场文书
2015年纪委工作总结
2015/05/13 职场文书
组织委员竞选稿
2015/11/21 职场文书