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

相關文章
相關標籤/搜索