python生成器的學習,簡單介紹一下迭代器

2022-07-22 00:15:24 字數 1622 閱讀 5126

從列表生成式開始學起:[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>

下面看兩個生成器的例子。

1

def 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

defconsumer(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)

總結:生成器的兩個方法:__next__()  send()  有乙個關鍵字:yield  

對生成器和迭代器進行一下總結:

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 語句的函式,就是生成器函式,呼叫後返...