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类型强制转换long to int的代码
Feb 10 Python
11个并不被常用但对开发非常有帮助的Python库
Mar 31 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
Jun 13 Python
PyQt5每天必学之布局管理
Apr 19 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
Oct 29 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
Jul 24 Python
python实现微信小程序用户登录、模板推送
Aug 28 Python
Python socket模块ftp传输文件过程解析
Nov 05 Python
关于pytorch处理类别不平衡的问题
Dec 31 Python
Python中无限循环需要什么条件
May 27 Python
Python try except else使用详解
Jan 12 Python
详细总结Python常见的安全问题
May 21 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令牌 Token改进版
2008/07/18 PHP
深入php多态的实现详解
2013/06/09 PHP
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
jquery实现网站超链接和图片提示效果
2013/03/21 Javascript
JS解决url传值出现中文乱码的另类办法
2013/04/08 Javascript
Javascript 颜色渐变效果的实现代码
2013/10/01 Javascript
动态读取JSON解析键值对的方法
2014/06/03 Javascript
完美实现仿QQ空间评论回复特效
2015/05/06 Javascript
cocos2dx骨骼动画Armature源码剖析(一)
2015/09/08 Javascript
基于JavaScript获取鼠标位置的各种方法
2015/12/16 Javascript
bootstrap datetimepicker日期插件使用方法
2017/01/13 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
bootstrap轮播图示例代码分享
2017/05/17 Javascript
简单实现js拖拽效果
2017/07/25 Javascript
Angular中使用better-scroll插件的方法
2018/03/27 Javascript
Nuxt升级2.0.0时出现的问题(小结)
2018/10/08 Javascript
使用Python编写一个最基础的代码解释器的要点解析
2016/07/12 Python
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
2017/11/08 Python
matplotlib绘制动画代码示例
2018/01/02 Python
python实现连连看辅助(图像识别)
2020/03/25 Python
Python字符串大小写转换拼接删除空白
2019/09/19 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
使用sublime text3搭建Python编辑环境的实现
2021/01/12 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
Onzie官网:美国时尚瑜伽品牌
2019/08/21 全球购物
如何拷贝一整个Java对象,包括它的状态
2013/12/27 面试题
销售工作岗位职责
2013/12/24 职场文书
公司停电通知
2015/04/15 职场文书
傲慢与偏见读书笔记
2015/06/29 职场文书
幼儿园庆六一主持词
2015/06/30 职场文书
2016年万圣节活动总结
2016/04/05 职场文书
Python道路车道线检测的实现
2021/06/27 Python
一文带你探究MySQL中的NULL
2021/11/11 MySQL
解析MySQL索引的作用
2022/03/03 MySQL
Mysql开启外网访问
2022/05/15 MySQL