迭代器和生成器

2022-05-14 11:59:47 字數 2688 閱讀 8658

一 可迭代物件

什麼叫迭代?:乙個乙個取值,就像for迴圈一樣取值

可以直接作用於for迴圈的物件統稱為可迭代物件:iterable,有以下兩類

迭代器協議:可以被迭代要滿足要求的就叫做可迭代協議。內部實現了__iter__方法

二 迭代器

迭代器大部分都是在python的內部去使用的,我們直接拿來用就行了

迭代器的優點:如果用了迭代器,節約記憶體,方便操作

三 可迭代和迭代器的相同點和不同點

都可以用for迴圈,迭代器內部多實現了乙個__next__方法

四判斷迭代器和可迭代物件的方法

第一種:判斷內部是不是實現了__next__方法

'

__iter__

'in dir(str)#

如果__iter__在這個方法裡面,就是可迭代的。

第二種:

iterable 判斷是不是可迭代物件

iterator 判斷是不是迭代器

from collections import

iterable

from collections import

iterator

#比如給乙個字串

s='abc

'print(isinstance(s,iterable))#

isinstance判斷型別的

print

(isinstance(s,iterator))

#判斷range和map函式

map1=map(abs,[1,-2,3,-4])

print

(isinstance(map1,iterable))

print(isinstance(map1,iterator))#

map方法自帶迭代器

s=range(100)#

是乙個可迭代的,但是不是迭代器

print

(isinstance(s,iterable))

print(isinstance(s,iterator))

五 生成器

列表生成式

#

*****=一層迴圈*****=

l = [i*i for i in range(1,10)]

print

(l)#

上面的列表推倒式就相當於下面的

l =

for i in range(1,10):

print

(l)l =

#*****=多層迴圈*****===

#1.列表推倒式

l = [i*j for i in range(1,10) for j in range(1,10)]

print

(l)#

2.迴圈

l =for i in range(1,10):

for j in range(1,10):

s = i*j

print(l)

通過列表生成式,建立乙個包含100萬個元素的列表,不僅占用很大的儲存空間,如果我們僅僅需要訪問前面幾個元素,那後面絕大多數元素占用的空間都白白浪費了。

生成器不必建立完整的list,通過next()方法隨用隨取,從而節省大量的空間。

生成器的建立

yield函式:

你可能會問,為什麼listdictstr等資料型別不是iterator

這是因為python的iterator物件表示的是乙個資料流,iterator物件可以被next()函式呼叫並不斷返回下乙個資料,直到沒有資料時丟擲stopiteration錯誤。可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,只能不斷通過next()函式實現按需計算下乙個資料,所以iterator的計算是惰性的,只有在需要返回下乙個資料時它才會計算。

iterator甚至可以表示乙個無限大的資料流,例如全體自然數。而使用list是永遠不可能儲存全體自然數的。

小結

生成器都是iterator物件,但listdictstr雖然是iterable,卻不是iterator

凡是可作用於for迴圈的物件都是iterable型別;

凡是可作用於next()函式的物件都是iterator型別,它們表示乙個惰性計算的序列;

集合資料型別如listdictstr等是iterable但不是iterator,不過可以通過iter()函式獲得乙個iterator物件。

python3的for迴圈本質上就是通過不斷呼叫next()函式實現的

生成器和迭代器

可以直接作用於for迴圈的物件稱為可迭代物件 iterable.可以用isinstance 判斷乙個物件是否是iterable物件。isinstance iterable true isinstance iterable true isinstance 235,iterable false 而生成器...

迭代器和生成器

1 迭代器的概念 print dir 告訴我列表的所有用法 有雙下劃線的所有方法叫做雙下方法,是c語言已經寫好的方法。你可以用不止一種方法呼叫它。列表的用法變集合 set dir 求交集 set dir set dir set dir 求列表,字典,字串它們的用法的交集 他們共同的用法 iterab...

生成器和迭代器

1.iterator 迭代器 舉例 我們對list使用for for i in 1,2,3,4 print i 12 34對string物件使用for for ch in python print ch py thon對字典物件使用for for k in print k yx對檔案使用for fo...