迭代器與生成器

2022-03-28 01:37:31 字數 1346 閱讀 8036

1.什麼是迭代器

迭代器是python最強大的功能之一,是訪問集合元素的一種方式

迭代器是乙個可以記住遍歷的位置的物件

迭代器有兩個基本的方法iter()和next()

stopiteration異常用於標識迭代的完成,防止出現無限迴圈的情況

什麼是迭代?

迭代是乙個重複的過程,但是每次重複都是基於上一次重複的結果而繼續

迭代器是迭代取值的工具

2.為什麼要用迭代器?

迭代器:優點:1,提供一種不依賴索引的迭代取值方式

2.更節省記憶體

缺點:1.不如索引的取值方式靈活

2.取值是一次性的,只能往後取,無法**值的個數

3.如何用迭代器?

可迭代的物件:有str list tuple dict set檔案物件

但凡內建有__iter__方法的物件都稱之為可迭代物件

迭代器物件:檔案物件

既內建有__iter__方法又內建有__next__方法的物件都稱之為迭代器物件

呼叫可迭代物件下__iter__方法,會有乙個返回值,該返回值就是內建的迭代器物件

for 迴圈的底層原理

1.呼叫in後面的那個值/物件的__iter__方法,拿到乙個迭代器物件iter_obj

2.呼叫迭代器物件iter_obj__next__()將得到的返回值賦值變數名k,迴圈往復直到取值完畢

3.捕捉異常結束迴圈

2.生成器就是一種自定義的迭代器

如何得到生成器?

但凡函式內出現yield關鍵字,再去呼叫函式不會立即執行函式體**,會得到乙個返回值,該返回值就是生成器物件,

即自定義的迭代器

yield1.提供一種自定義迭代器的解決方案

2.yield&return相同點:都可以得到返回值,返回值沒有型別限制

不同點:return只能返回一次值,yield卻可以讓函式暫停在某乙個位置,可以返回多次值

在python中使用了yield的函式被稱之為生成器

跟普通函式不同的是,生成器是乙個返回迭代器的函式,只能用於迭代操作,更簡單點理解生成器就是乙個迭代器

在呼叫生成器執行的過程中,每次遇到yield時,函式會暫停並儲存當前所有的執行資訊,返回yield的值,並在下一次執行next()方法時

從當前位置繼續執行

呼叫乙個生成器物件返回的是乙個迭代器物件

1.函式的遞迴呼叫

在呼叫乙個函式的過程中又直接或間接的呼叫該函式本身,稱之為遞迴呼叫

遞迴必須滿足兩個條件:

1.每進入下一次遞迴呼叫,問題的規模都應該有所減少

2.遞迴必須有乙個明確的結束條件

遞迴有兩個明確的階段:

1.回溯

2.遞推

迭代器與生成器

可迭代物件 可以直接作用於for迴圈的物件 統稱為可迭代物件 返回迭代器的物件 即iterable。一是集合資料型別,如list tuple dict set str等 二是generator,包括生成器和帶yield的generator function。容器 簡單來說 容器是一系列元素的集合 容...

生成器與迭代器

迭代是python最強大的功能之一,是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。迭代器有兩個基本的方法 iter 和 next 字串,列表或元組物件都可用於建立迭代器 list 1,2,3,...

生成器與迭代器

通過列表推導式,可以直接建立乙個列表,但是收到記憶體限制,列表容量肯定是有限的而且,建立乙個包含100萬個元素的列表,占用很大的儲存空間。如果我們僅僅需要訪問前面幾個元素,後面 後面元素的占用儲存空間就被浪費 所以,如果列表元素可以按照某種演算法算出來,那我們就可以再迴圈當中不斷地推導它,生成元素,...