迭代器是一個對象,是python很是強大的特性html
根本上說, 迭代器就是有一個 next() 方法的對象, 而不是經過索引來計數. 當你或是一個循環機制(例如 for 語句)須要下一個項時, 調用迭代器的 next() 方法就能夠得到它. 條目所有取出後, 會引起一個 StopIteration 異常, 這並不表示錯誤發生, 只是告訴外部調用者, 迭代完成.python
迭代器就是重複地作一些事情,能夠簡單的理解爲循環,在python中實現了__iter__方法的對象是可迭代的,實現了next()方法的對象是迭代器,這樣提及來有點拗口,實際上要想讓一個迭代器工做,至少要實現__iter__方法和next方法。不少時候使用迭代器完成的工做使用列表也能夠完成,可是若是有不少值列表就會佔用太多的內存,並且使用迭代器也讓咱們的程序更加通用、優雅、pythonic。函數
若是一個類想被用於for ... in
循環,相似list或tuple那樣,就必須實現一個__iter__()
方法,該方法返回一個迭代對象,而後,Python的for循環就會不斷調用該迭代對象的next()
方法拿到循環的下一個值,直到遇到StopIteration錯誤時退出循環。工具
斐波那契數列code
不用__iter__的時候htm
用__iter__的時候對象
不過, 迭代器也有一些限制. 例如你不能向後移動, 不能回到開始, 也不能複製一個迭代器.若是你要再次(或者是同時)迭代同個對象, 你只能去建立另外一個迭代器對象. 不過, 這並不糟糕,由於還有其餘的工具來幫助你使用迭代器.blog
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