博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python迭代器
阅读量:4597 次
发布时间:2019-06-09

本文共 722 字,大约阅读时间需要 2 分钟。

首先解释以下迭代器跟可迭代对象(Iterable)的区别,可以直接作用于for循环或者实现了__iter__的对象统称为可迭代对象(Iterable)。可以被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator)。

 

1,可迭代对象

    可迭代对象不一定是迭代器,像list是可以被for循环的,但不是一个迭代器,可迭代对象的特征:

    一、对象里面包含__iter()__方法的实现,

    二、对象的__iter__(self)函数经调用之后会返回一个迭代器,里面包含具体数据获取的实现。

       

   

2、迭代器

    对象里面包含next()方法的实现,(如果是python3以上版本,是__next__()方法),

    next()方法在正确范围内返回期待的数据以及超出范围后能够抛出StopIteration的错误停止迭代。

   

   

 

   下面这个程序既是一个迭代器也是一个可迭代对象

      

   

    程序实现了__iter__(self)方法,并且返回一个自身对象,因为self也是一个迭代器,所以也是一个可迭代对象

    值得注意的是fa跟fb指向的是同一个地址,所以在next(fa)后执行next(fb)同样指针会下移,如果不想让fb指向同一个地址,那么需要copy模块的deepcopy方法来深度复制。

 

3、迭代器的优点:

    “流式”数据处理方式减少内存消耗:

    比如处理文件,一下猛地把全部数据全部取出来放到内存里面进行处理会导致程序消耗大量内存,有时甚至没法做到

    每次调用 next() 方法的时候做两件事:

  1. 为下一次调用 next() 方法修改状态
  2. 为当前这次调用生成返回结果

   

 

 

   

   

   

转载于:https://www.cnblogs.com/wxzhao/p/6019067.html

你可能感兴趣的文章
MySQL源码 数据结构array
查看>>
(文件过多时)删除目录下全部文件
查看>>
T-SQL函数总结
查看>>
python 序列:列表
查看>>
web移动端
查看>>
pythonchallenge闯关 第13题
查看>>
linux上很方便的上传下载文件工具rz和sz使用介绍
查看>>
React之特点及常见用法
查看>>
【WEB前端经验之谈】时间一年半,或沉淀、或从零开始。
查看>>
优云软件助阵GOPS·2017全球运维大会北京站
查看>>
linux 装mysql的方法和步骤
查看>>
poj3667(线段树区间合并&区间查询)
查看>>
51nod1241(连续上升子序列)
查看>>
SqlSerch 查找不到数据
查看>>
集合相关概念
查看>>
Memcache 统计分析!
查看>>
(Python第四天)字符串
查看>>
个人介绍
查看>>
使用python动态特性时,让pycharm自动补全
查看>>
关于R软件的安装
查看>>