python __iter__ 迭代器

1. 迭代器是什么?

 迭代器是一个对象,是python很是强大的特性html

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

 

2.迭代器有什么用?

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

 

3.迭代器该怎么用?

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

 

4.例子

 斐波那契数列code

不用__iter__的时候htm

 

 

 用__iter__的时候对象

 

 

 

5.迭代器有什么很差的地方

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

 

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

相关文章
相关标签/搜索