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和shell实现的校验IP地址合法性脚本分享
Oct 23 Python
python 读取excel文件生成sql文件实例详解
May 12 Python
详解python string类型 bytes类型 bytearray类型
Dec 16 Python
python初学之用户登录的实现过程(实例讲解)
Dec 23 Python
python使用代理ip访问网站的实例
May 07 Python
对python的bytes类型数据split分割切片方法
Dec 04 Python
python使用time、datetime返回工作日列表实例代码
May 09 Python
用python建立两个Y轴的XY曲线图方法
Jul 08 Python
对django views中 request, response的常用操作详解
Jul 17 Python
python多线程与多进程及其区别详解
Aug 08 Python
python实现批量修改服务器密码的方法
Aug 13 Python
对YOLOv3模型调用时候的python接口详解
Aug 26 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
global.php
2006/12/09 PHP
PHP中的CMS的涵义
2007/03/11 PHP
php下清空字符串中的HTML标签的代码
2010/09/06 PHP
基于PHP Socket配置以及实例的详细介绍
2013/06/13 PHP
php时间戳转换的示例
2014/03/31 PHP
CI(CodeIgniter)框架介绍
2014/06/09 PHP
php+js实现百度地图多点标注的方法
2016/11/30 PHP
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
jquery判断小数点两位和自动删除小数两位后的数字
2014/03/19 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
jQuery插件ajaxFileUpload使用实例解析
2016/10/19 Javascript
jQ处理xml文件和xml字符串的方法(详解)
2016/11/22 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
Vue项目引进ElementUI组件的方法
2018/11/11 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
一次微信小程序内地图的使用实战记录
2019/09/09 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
javascript实现蒙版与禁止页面滚动
2020/01/11 Javascript
关于引入vue.js 文件的知识点总结
2020/01/28 Javascript
jquery实现异步文件上传ajaxfileupload.js
2020/10/23 jQuery
[01:03:51]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第三场
2018/04/09 DOTA
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
zookeeper python接口实例详解
2018/01/18 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
2020/04/02 Python
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
德国传统玻璃制造商:Cristalica
2018/04/23 全球购物
美国综合购物商城:UnbeatableSale.com
2018/11/28 全球购物
台湾时尚彩瞳专门店:imeime
2019/08/16 全球购物
计算机科学与技术应届生求职信
2013/11/07 职场文书
电脑售后服务承诺书
2014/03/27 职场文书
供货协议书范本
2014/04/22 职场文书
先进教师事迹材料
2014/12/16 职场文书
工厂仓管员岗位职责
2015/04/01 职场文书
Python列表的索引与切片
2022/04/07 Python