1. 迭代器是什么?

迭代器是一个对象,是python非常强大的特性

根本上说, 迭代器就是有一个 next() 方法的对象, 而不是通过索引来计数. 当你或是一个循环机制(例如 for 语句)需要下一个项时, 调用迭代器的 next() 方法就可以获得它. 条目全部取出后, 会引发一个 StopIteration 异常, 这并不表示错误发生, 只是告诉外部调用者, 迭代完成.

2.迭代器有什么用?

迭代器就是重复地做一些事情,可以简单的理解为循环,在python中实现了__iter__方法的对象是可迭代的,实现了next()方法的对象是迭代器,这样说起来有点拗口,实际上要想让一个迭代器工作,至少要实现__iter__方法和next方法。很多时候使用迭代器完成的工作使用列表也可以完成,但是如果有很多值列表就会占用太多的内存,而且使用迭代器也让我们的程序更加通用、优雅、pythonic。

3.迭代器该怎么用?

如果一个类想被用于for ... in循环,类似list或tuple那样,就必须实现一个__iter__()方法,该方法返回一个迭代对象,然后,Python的for循环就会不断调用该迭代对象的next()方法拿到循环的下一个值,直到遇到StopIteration错误时退出循环。

4.例子

斐波那契数列

不用__iter__的时候

用__iter__的时候

5.迭代器有什么不好的地方

不过, 迭代器也有一些限制. 例如你不能向后移动, 不能回到开始, 也不能复制一个迭代器.如果你要再次(或者是同时)迭代同个对象, 你只能去创建另一个迭代器对象. 不过, 这并不糟糕,因为还有其他的工具来帮助你使用迭代器.

6.迭代器工作原理

7.扩展

1)reversed() 内建函数将返回一个反序访问的迭代器. enumerate() 内建函数同样也返回迭代器.另外两个新的内建函数, any() 和 all() , 在 Python 2.5 中新增, 如果迭代器中某个/所有条目的值都为布尔真时,则它们返回值为真. 本章先前部分我们展示了如何在 for 循环中通过索引或是可迭代对象来遍历条目. 同时 Python 还提供了一整个 itertools 模块, 它包含各种有用的迭代器.

2)Python 还引进了三个新的内建字典方法来定义迭代: myDict.iterkeys() (通过 keys 迭

代), myDict.itervalues() (通过 values 迭代), 以及 myDicit.iteritems() (通过 key/value 对来迭代). 注意, in 操作符也可以用于检查字典的 key 是否存在 , 之前的布尔表达式myDict.has_key(anyKey) 可以被简写为 anyKey in myDict .

3)文件对象生成的迭代器会自动调用 readline() 方法. 这样, 循环就可以访问文本文件的所有行.

参考

https://www.cnblogs.com/xywq/p/7813915.html

最新文章

  1. [转]oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务。
  2. js执行顺序<转>
  3. JavaScript-求时间差
  4. mysql优化(三)–explain分析sql语句执行效率
  5. 截取usb数据包,控制usb设备----Relay设备
  6. c# SQL CLR 之一
  7. Unity手游之路<七>角色控制器
  8. uva 688 - Mobile Phone Coverage
  9. 使用xdebug+eclipse远程调试centOS7上的PHP代码
  10. Bootstrap入门(二十六)JS插件3:滚动监听
  11. 财务模块多组织,GL, SLA, SOB, COA, BSV, CCID, LE 概念的简单介绍
  12. 解决window.showModalDialog在Firefox无法支持
  13. Django 模本(Template--for--csrf--if--filter--simple_tag模版继承等)
  14. angular ng-click防止重复提交
  15. 自动化运维(1)之二进制部署MySQL5.7
  16. Yarn import now uses package-lock.json
  17. C#之Lambda不得不说的用法
  18. python之pandas&&DataFrame(二)
  19. 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败解决方案
  20. 【Spark SQL 源码分析系列文章】

热门文章

  1. CentOS7安装CDH 第十四章:CDH的优化
  2. ubuntu16搭建LAMP环境
  3. 重新编程Hexiwear Docking Station扩展坞
  4. Codeforces #364 (Div. 2) D. As Fa(数学公式推导 或者二分)
  5. webpack 配置react脚手架(四):路由配置
  6. /tmp/supervisor.sock no such file 报错
  7. Git----拉取远程分支,git pull,git rebase,git pull --rebase的区别
  8. Java8新特性--函数式编程
  9. vue 组件高级用法(递归组件,内联模板,动态组件,异步组件)
  10. springboot使用rabbitmq-Topic模式,亲自实测能用!!!