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 根据时间来生成唯一的字符串方法
Jan 14 Python
Python2和Python3的共存和切换使用
Apr 12 Python
python设置环境变量的原因和方法
Jun 24 Python
python 画二维、三维点之间的线段实现方法
Jul 07 Python
python的re模块使用方法详解
Jul 26 Python
Python 合并多个TXT文件并统计词频的实现
Aug 23 Python
Python 点击指定位置验证码破解的实现代码
Sep 11 Python
解决pycharm 安装numpy失败的问题
Dec 05 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
Feb 23 Python
Python类的绑定方法和非绑定方法实例解析
Mar 04 Python
python如何判断IP地址合法性
Apr 05 Python
Python 执行矩阵与线性代数运算
Aug 01 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程序防止ddos,dns,集群服务器攻击的解决办法
2013/06/18 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
2014/08/21 PHP
PHP整合PayPal支付
2015/06/11 PHP
php函数连续调用实例分析
2015/07/30 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
2017/07/19 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
jquery 学习笔记 传智博客佟老师附详细注释
2020/09/12 Javascript
js自动下载文件到本地的实现代码
2013/04/28 Javascript
三种检测iPhone/iPad设备方向的方法
2014/04/23 Javascript
jquery SweetAlert插件实现响应式提示框
2015/08/18 Javascript
javascript流程控制语句集合
2017/09/18 Javascript
AngularJS实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 Javascript
扫微信小程序码实现网站登陆实现解析
2019/08/20 Javascript
vue调用语音播放的方法
2019/09/27 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
[52:08]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第一局
2016/03/05 DOTA
零基础写python爬虫之urllib2使用指南
2014/11/05 Python
利用python实现命令行有道词典的方法示例
2017/01/31 Python
python2.7实现爬虫网页数据
2018/05/25 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
对python中的控制条件、循环和跳出详解
2019/06/24 Python
Python3 批量扫描端口的例子
2019/07/25 Python
为什么python比较流行
2020/06/19 Python
土耳其家居建材网站:Koçtaş
2016/11/22 全球购物
Lacoste澳大利亚官网:服装、鞋类及配饰
2018/11/14 全球购物
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
英国珠宝网站Argento: PANDORA、Olivia Burton和Nomination等
2020/05/08 全球购物
药学专业大专生的自我评价
2013/12/12 职场文书
工作失误检讨书(3篇)
2014/10/11 职场文书
运动会广播稿200米(5篇)
2014/10/15 职场文书
部队2015年终工作总结
2015/04/02 职场文书
2015年组织委员工作总结
2015/04/23 职场文书
离婚纠纷代理词
2015/05/23 职场文书
如何搭建 MySQL 高可用高性能集群
2021/06/21 MySQL
js作用域及作用域链工作引擎
2022/07/07 Javascript