迭代器和生成器

2022-09-14 00:45:16 字數 2064 閱讀 2962

迭代器示例:(迴圈底層就是使用迭代器)

特點:節省記憶體 惰性執行 不可逆向迭代

str1 = "

alex

"iterable =iter(str1) #iter函式可以將乙個可迭代資料變成迭代器

# print(iterable.__dir__()) #迭代器裡面有__iter__ 和 __next__方法

# print(len(iterable)) # 迭代器裡沒有len方法

print(iterable.__sizeof__()) # 記憶體中固定佔據32個位元組

print(iterable.__next__())

print(iterable.__next__())

print(iterable.__next__())

print(iterable.__next__())

# print(iterable.__next__()) #迭代器沒有元素時會報錯

view code

生成器示例

def generator():    # 建立乙個迭代器

print(

"yiled之前")

yield

1yield

2yield

8print(

'yield之後')

a =generator()

print(a.__sizeof__()) #固定佔據96個位元組

print(a.__next__()) # 執行時找到yield就停止

# print(a.__next__()) #第二個yield沒有找到,報錯

view code

生成器的send方法

def generator():    # 建立乙個生成器

print(

"*****")

a = yield

1111

print(a)

print(

"*****")

b = yield

2222

print(b)

print(

"*****")

c = yield

3333

print(c)

print(

'*****')

yield

4444

a =generator()

print(a.__next__())

print(a.send(

'我是a

')) # send方法相當於__next__ 但是會給上乙個yield賦值斷點賦值

print(a.send(

'我是b'))

print(a.send(

'我是c

'))

view code

迭代器與生成器的區別:

迭代器是乙個更抽象的概念,任何物件,如果它的類有 next 方法和 iter 方法返回自己本身,對於 string、list、

dict、tuple 等這類容器物件,使用 for 迴圈遍歷是很方便的。在後台 for 語句對容器物件呼叫 iter()函式,iter()

是 python 的內建函式。iter()會返回乙個定義了 next()方法的迭代器物件,它在容器中逐個訪問容器內元素,next()

也是 python 的內建函式。在沒有後續元素時,next()會丟擲乙個 stopiteration 異常。

生成器(generator)是建立迭代器的簡單而強大的工具。它們寫起來就像是正規的函式,只是在需要返回數

據的時候使用 yield 語句。每次 next()被呼叫時,生成器會返回它脫離的位置(它記憶語句最後一次執行的位置

和所有的資料值)

區別:生成器能做到迭代器能做的所有事,而且因為自動建立了 iter()和 next()方法,生成器顯得特別簡潔,而且

生成器也是高效的,使用生成器表示式取代列表解析可以同時節省記憶體。除了建立和儲存程式狀態的自動方法,當

發生器終結時,還會自動丟擲 stopiteration 異常。

生成器和迭代器

可以直接作用於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...