從列表生成式開始學起:[item**2 for item in range(10)],會生成列表:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
為了節省資源,在讀取、使用大量資料時,使用生成器可以節省系統資源,生成器會產生乙個列表,而這個列表中的資料不會一次性讀入記憶體或寫入,而是只記憶其中乙個資料。
將上邊的[item**2 for item in range(10)] 的方括號改成小括號,就成變成乙個生成器。結果為at 0x0000000002381a98>
下面看兩個生成器的例子。
1def feb(max): #
定義了了乙個生成器。
2 n, a, b = 0, 0, 1
3while n4yield b #
返回乙個資料。
5 a,b=b,a+b
6 n+=1
7return
"done"#
在讀取生成器出錯時的返回值。正常時不返回。
8 f=feb(10)9#
while true:10#
try:11#
i=next(f)12#
print ("f:",i)13#
except stopiteration as e:14#
print ("this is error as:%s"%(e.value))15#
break
16print
(type(f))
17for i in
f:18
print (i)
1總結:生成器的兩個方法:__next__() send() 有乙個關鍵字:yielddefconsumer(name):
2print("
%s 準備啦!
" %name)
3while
true:
4 baozi = yield
5print("
第[%s]對水果,被[%s]領走了!
" %(baozi,name))
6def
prouect(max):
7 c1=consumer("
jack")
8 c2=consumer("
tom"
)9 c1.__next__
()10 c2.__next__
()11 i=0
12while i13c1.send(i)
14c2.send(i)
15 i+=1
16 prouect(10)
對生成器和迭代器進行一下總結:
1、凡是可作用於for迴圈的物件都是iterable型別。(可迭代物件)
2、凡是可作用於next()函式的物件都是iterator型別(迭代器),它們表示乙個惰性計算的序列(只儲存乙個資料)。可以用來表達無窮大的數,這是列表等其它型別絕對無法做到的。 (生成器)
3、一些集合資料型別如list dict set str等都是iterable型別,但不是iterator,可以使用iter()函式來獲得乙個iterator物件。
python 生成器作用 Python生成器
生成器介紹 在函式內部包含yield關鍵字,那麼該函式執行的結果是生成器,生成器就是迭代器。生成器的功能 把函式結果做成迭代器 以一種優雅的方式封裝好iter,next 提供了一種自己定義迭代器的方式。使用生成器建立乙個迭代器 def a print a yield 11 使用yield,執行後返回...
python生成器好處 Python生成器筆記
python中三大器有迭代器,生成器,裝飾器,本文主要講述生成器。主要從生成器的概念,本質,以及yield關鍵字的使用執行過程。本質 生成器是一類特殊的迭代器,使用了yield關鍵字的函式不再是函式,而是生成器。使用了yield的函式就是生成器 1.yield關鍵字有兩點作用 1.1 yield語句...
python生成器函式 Python 生成器函式
一 生成器 生成器指的是生成器物件,可由生成器表示式得到,也可使用 yield 關鍵字得到乙個生成器函式,呼叫這個函式得到乙個生成器物件 生成器物件,是乙個可迭代物件,是乙個迭代器 生成器物件,是延遲計算 惰性求值的 1.1 生成器函式 函式體重包含 yield 語句的函式,就是生成器函式,呼叫後返...