迭代器與生成器

2022-08-15 10:06:22 字數 1253 閱讀 4591

迭代器:表示的是資料流,迭代器的計算是惰性的,可以被next()函式呼叫並不斷返回值,直到沒有資料時丟擲異常stopiteration

迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,

不過這也沒什麼,因為人們很少在迭代途中往後退。另外,迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。迭代器僅僅

在迭代到某個元素時才計算該元素,而在這之前或之後,元素可以不存在或者被銷毀。這個特點使得它特別適合用於遍歷一些巨大的或是無限

的集合,比如幾個g的檔案

特點:訪問者不需要關心迭代器內部的結構,僅需通過next()方法不斷去取下乙個內容

不能隨機訪問集合中的某個值 ,只能從頭到尾依次訪問

訪問到一半時不能往回退便於迴圈比較大的資料集合,節省記憶體,並生成乙個迭代器

可以被next()函式呼叫並不斷返回下乙個值得物件叫迭代器iterator;可以直接作用於for 迴圈的物件統稱為可迭代物件iterable。

list、tuple、str、dict、generator都是可迭代物件

通過iter()函式可以把可迭代物件變成迭代器,檔案就是乙個迭代器。

a = iter([1,2,3,4,5])

生成器(generator ):定義:乙個函式呼叫時返回乙個迭代器,那這個函式就叫做生成器(generator),如果函式中包含yield語法,那這個函式就會變成生成器

g=(i*2 for i in range(20))

只有在呼叫時才會生成相應的資料

列表生成式

l=[i*2 for i in range(20)]

這個yield的主要效果呢,就是可以使函式中斷,並儲存中斷狀態,中斷後,**可以繼續往下執行,過一段時間還可以再重新呼叫這個函式,從上次yield的下一句開始執行。

迭代器與生成器

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

生成器與迭代器

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

生成器與迭代器

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