迭代器示例:(迴圈底層就是使用迭代器)特點:節省記憶體 惰性執行 不可逆向迭代
str1 = "view codealex
"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__()) #迭代器沒有元素時會報錯
生成器示例
def generator(): # 建立乙個迭代器view codeprint(
"yiled之前")
yield
1yield
2yield
8print(
'yield之後')
a =generator()
print(a.__sizeof__()) #固定佔據96個位元組
print(a.__next__()) # 執行時找到yield就停止
# print(a.__next__()) #第二個yield沒有找到,報錯
生成器的send方法
def generator(): # 建立乙個生成器view codeprint(
"*****")
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
'))
迭代器與生成器的區別:
迭代器是乙個更抽象的概念,任何物件,如果它的類有 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...