學會迭代和迭代器,讓你的程序更省內存

迭代,很熟悉有很陌生,猛地一說,好多人摸不到頭腦,但是在編程語言中,是常見的一種說法。今天我們就走進迭代,講述一下迭代以及迭代器的用法。

迭代定義:通過for 循環遍歷列表,元組,我們就稱之為迭代!

迭代器定義:可以被next()函數調用並不斷返回下一個值的對象。

為了統一說法,我們可以按照下面來定義;

凡是可作用於for循環的對象都稱為迭代。

凡是可作用於next()函數的對象成為迭代器。

學會迭代和迭代器,讓你的程序更省內存

區別:集合類型list ,dict, str 是迭代但不是迭代器!

上文中說到定義區別,那麼我們什麼時候用,怎麼用,用它有什麼好處呢?我們繼續。

迭代器,是具有next方法(新版__next__方法)的對象,這個方法在調用的時候不需要任何參數。在調用next方法時,迭代器返回它下一個值,否則會引發stopiteration異常。

__iter__方法:返回一個迭代器。 一個實現了__iter__方法的對象時可迭代的,一個實現了next方法的對象則是迭代器。

我們用下面的例子來講一下迭代器。

學會迭代和迭代器,讓你的程序更省內存

首先創建一個名稱叫做Fibs的迭代器。(我們這用的列表就是斐波那契列表。)如果對斐波那契有不清楚的可以點開下面鏈接看一下。

(小編在這裡賣個萌:本來加上鍊接的,但是不確定為什麼總是被認為外部鏈接,所以就刪除了。由需要鏈接的小夥伴可以留言給我。希望大家不要拿雞蛋砸我。吼!吼!吼!)

學會迭代和迭代器,讓你的程序更省內存

fibs=Fibs() 其次產生一個fibs對象,注:以前產生了一個Fibs對象,因為有next 方法,所以返回的Fibs迭代器。

for f in fibs:

if f >1000:

print (f)

break

將迭代器Fibs應用在for循環中,比如去尋找斐波那契數列中比1000大的數中的最小數。因為設置了break,所以循環停止了,否則會一直循環下去。

從迭代器得到序列。

迭代器可用各種構造方法顯式的轉化為序列,例:使list構造方法將迭代器轉化為列表。

看下面例子。

學會迭代和迭代器,讓你的程序更省內存

以上就是今天要說的迭代以及迭代器的用法的定義,如果還有不清楚的小夥伴們可以給小編留言。

提前透露一下,我們明天要說的內容時關於生成器的,感興趣的小夥伴歡迎繼續關注。


分享到:


相關文章: