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 相关文章推荐
go语言计算两个时间的时间差方法
Mar 13 Python
python 读写txt文件 json文件的实现方法
Oct 22 Python
利用Python脚本实现ping百度和google的方法
Jan 24 Python
python实现各进制转换的总结大全
Jun 18 Python
python 中字典嵌套列表的方法
Jul 03 Python
Sanic框架异常处理与中间件操作实例分析
Jul 16 Python
Python3.6.2调用ffmpeg的方法
Jan 10 Python
解决Python3 抓取微信账单信息问题
Jul 19 Python
python画蝴蝶曲线图的实例
Nov 21 Python
python多线程使用方法实例详解
Dec 30 Python
python tkinter的消息框模块(messagebox,simpledialog)
Nov 07 Python
python数字图像处理:图像的绘制
Jun 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
欧美媒体选出10年前最流行的17部动画
2017/01/18 日漫
php垃圾代码优化操作代码
2010/08/05 PHP
php中session_id()函数详细介绍,会话id生成过程及session id长度
2015/09/23 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
js中小数转换整数的方法
2014/01/26 Javascript
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
javascript遇到html5的一些表单属性
2015/07/05 Javascript
js实现适用于素材网站的黑色多级菜单导航条效果
2015/08/24 Javascript
jQuery实现点击行选中或取消CheckBox的方法
2016/08/01 Javascript
BootStrap 动态表单效果
2017/06/02 Javascript
跨域解决之JSONP和CORS的详细介绍
2018/11/21 Javascript
jquery分页优化操作实例分析
2019/08/23 jQuery
vue中使用element组件时事件想要传递其他参数的问题
2019/09/18 Javascript
python自动化测试之连接几组测试包实例
2014/09/28 Python
Python解析nginx日志文件
2015/05/11 Python
python数据清洗系列之字符串处理详解
2017/02/12 Python
简述:我为什么选择Python而不是Matlab和R语言
2017/11/14 Python
numpy.transpose对三维数组的转置方法
2018/04/17 Python
详解Python用户登录接口的方法
2019/04/17 Python
anaconda如何查看并管理python环境
2019/07/05 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
2020/07/31 Python
python IDLE添加行号显示教程
2020/04/25 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
python json.dumps() json.dump()的区别详解
2020/07/14 Python
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
英国最红的高街时尚品牌:Topshop
2016/08/05 全球购物
美国名表在线商城:Ashford(支持中文)
2019/09/24 全球购物
艺术设计专业个人求职信范文
2013/12/11 职场文书
宾馆仓管员岗位职责
2014/07/27 职场文书
学生违反校规检讨书
2014/10/28 职场文书
民事纠纷协议书
2016/03/23 职场文书
Redis如何实现分布式锁
2021/08/23 Redis
Python各协议下socket黏包问题原理
2022/04/12 Python
深入理解 Golang 的字符串
2022/05/04 Golang
Python 匹配文本并在其上一行追加文本
2022/05/11 Python