这里只讨论一个特殊的方法——__iter__,这个方法是迭代器规则的基础

  迭代器规则

  迭代的意思就是重复做一些事很多次——就像在循环中做的那样。到现在为止只是在for循环中对序列和字典进行迭代,但实际上也能对其他的对象进行迭代:实现__iter__方法的对象。

  __iter__方法返回一个迭代器,所谓的迭代器就是具有next方法(这个方法在调用时不需要任何参数)的对象。在调用next方法时,迭代器会返回它的下一个值。如果next方法被调用,但迭代器没有值可以返回,就会引发一个StopIteration异常。

  注意:迭代器规则在Python3.0中有一些变化。在新的规则中,迭代器对象应该实现__next__方法,而不是next。而新的内建函数next可以用于访问这个方法。换句话说,next(it)等同于3.0之前版本中的 it.next()

  迭代规则的关键是什么?为什么不使用列表?因为列表的杀伤力太大。如果有可以一个接一个地计算值的函数,那么在使用时可能是计算一个值时获取一个值——而不是通过列表一次性获取所有值。如果有很多值,列表就会占用太多的内存。但还有其他理由:使用迭代器更通用、更简单、更优雅。下面看看一个不用列表的例子。

  这里的“列表”是一个斐波那契数列。使用迭代器如下:

 1 In [37]: class Fibs: 2    ....:     def __init__(self): 3    ....:         self.a = 0 4    ....:         self.b = 1 5    ....:     def next(self): 6    ....:         self.a, self.b = self.b, self.a+self.b 7    ....:         return self.a 8    ....:     def __iter__(self): 9    ....:         return self10    ....: 

  注意,迭代器实现了__iter__方法,这个方法实际上返回迭代器本身。在很多情况下,__iter__会放到其他的会在for循环中使用的对象中。这样一来,程序就能返回所需的迭代器。此外,推荐使迭代器实现它自己的__iter__方法,然后就能直接在for循环中使用迭代其本身了。

  注意:正式的说法是,一个实现了__iter__方法的对象是可迭代的,一个实现了next方法的对象则是迭代器。

 1 In [38]: fibs = Fibs() 2  3 In [39]: for i in fibs: 4    ....:     if i < 100: 5    ....:         print i 6    ....:  7 1 8 1 9 210 311 512 813 1314 2115 3416 5517 89

转载于:https://www.cnblogs.com/skyhacker/archive/2012/02/02/2336382.html

python 迭代器相关推荐

  1. python迭代器生成器 学会再缩短一半开发效率 看看大牛是怎么写的

    一.迭代 什么叫做迭代? 比如在 Java 中,我们通过 List 集合的下标来遍历 List 集合中的元素,在 Python 中,给定一个 list 或 tuple,我们可以通过 for 循环来遍历 ...

  2. 简单介绍python迭代器和生成器

    这篇文章主要介绍了Python中的迭代器和生成器,涉及到Python中很多重要的特性,需要的朋友可以参考下,希望能够给你带来帮助 python迭代器和生成器 1.迭代器 这里用字典示例 while T ...

  3. python迭代器使用_python迭代器的使用方法实例

    什么是迭代器?迭代器是带有next方法的简单对象,当然也要实现__iter__函数.迭代器能在一序列的值上进行迭代,当没有可供迭代时,next方法就会引发StopIteration 的异常.pytho ...

  4. python生成器 图片分类_python批量处理图片图片Python迭代器和生成器介绍

    Python迭代器和生成器介绍迭代器 迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration ...

  5. python迭代器与生成器答案_史上最全 Python 迭代器与生成器

    原标题:史上最全 Python 迭代器与生成器 作者:浪子燕青 链接:http://www.langzi.fun/迭代器与生成器.html 迭代器与可迭代对象 概念 迭代器:是访问数据集合内元素的一种 ...

  6. Python 迭代器和 C++ 迭代器,最大的不同竟然是......

    作者 | 樱雨楼 责编 | 胡巍巍 前言 迭代器(Iterator)是 Python 以及其他各种编程语言中的一个非常常见且重要,但又充满着神秘感的概念.无论是 Python 的基础内置函数,还是各类 ...

  7. [转载] python迭代器

    参考链接: Python迭代器 迭代器 迭代器是一个可以记住遍历的位置的对象. 迭代器有两个基本的方法:iter() 和 next(). 使用对象内置的__iter__()方法生成迭代器 it = n ...

  8. python迭代器_Python迭代器

    python迭代器 Good day learners! In our previous tutorial, we learned about Python Operator Overloading. ...

  9. python迭代器的设计

    2019独角兽企业重金招聘Python工程师标准>>> python迭代器的设计 跟黄哥学python编程系列文章之迭代器 如何自定义迭代器,有2个必要条件 1.自定义类有一个方法_ ...

  10. 五分钟学会python函数_五分钟带你搞懂python 迭代器与生成器

    前言 大家周末好,今天给大家带来的是Python当中生成器和迭代器的使用. 我当初第一次学到迭代器和生成器的时候,并没有太在意,只是觉得这是一种新的获取数据的方法.对于获取数据的方法而言,我们会一种就 ...

最新文章

  1. 液态大脑与固态大脑——圣塔菲最新群体智能文集
  2. linux中deb怎样安装
  3. cad中lisp文件给恶作剧_CAD中LISP程序使用方法
  4. zeromq+python安装手册
  5. E20180404-ts
  6. HAProxy安装与配置(一)
  7. C语言之数组为参数传递表示指针(三十七)
  8. 深度学习之RNN、LSTM及正向反向传播原理
  9. plsqldev连接远程oracle
  10. 2022国产GIS软件排名
  11. 《未来世界的幸存者》:你会是未来世界的幸存者吗?
  12. 哈希(散列)函数的一些应用
  13. stacey矩阵 敏捷_通过矩阵镜头实现敏捷
  14. 计算机数据库基础知识填空题,数据库练习题(基础)
  15. mezzanine timezone 的问题
  16. java解决 No enclosing instance of type XXX is accessible的问题
  17. 微信h5分享图标没有展示
  18. MATLAB 线性插补缺省值
  19. C++求1000以内水仙花数
  20. BPDU Gard / BPDU Filter / Root Guard

热门文章

  1. 中小企业网站建设不妨试试快速建站
  2. 网站品牌词指数提升的四大方法
  3. php周计划表_PHP学习计划书
  4. 4固定在底部_自建房不搭彩钢棚,4根钢结构撑个玻璃棚遮风挡雨,上面多个露台...
  5. 如何完美隐藏Disposable的存储和销毁过程(一)
  6. 通过apt自动生成建造者模式单线程版代码(一)
  7. 开发日记-20190807 关键词 读书笔记《Linux 系统管理技术手册(第二版)》DAY 21
  8. lucene DocValues——没有看懂
  9. k8s object对象(pod controller)介绍
  10. Xcode:Task failed with exit 1 signal 0 {