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萬個元素的列表,占用很大的儲存空間。如果我們僅僅需要訪問前面幾個元素,後面 後面元素的占用儲存空間就被浪費 所以,如果列表元素可以按照某種演算法算出來,那我們就可以再迴圈當中不斷地推導它,生成元素,...