生成器函式

2021-09-10 12:08:43 字數 2284 閱讀 3347

## 生成器

是可以迭代的,但是你只可以讀取它一次,因為它並不把所有的值放在記憶體中,它是實時地生成資料:

>>> mygenerator = (x*x for x in range(3))

>>> for i in mygenerator :

... print(i)01

4

你不可以再次使用for i in mygenerator, 因為生成器只能被迭代一次:

先計算出0,然後繼續計算1,然後計算4,乙個跟乙個的…

包含yield語句的函式可以用來建立生成器物件,這樣的函式也稱生成器函式。

當你呼叫這個函式的時候,函式內部的**並不立馬執行

yield語句與return語句的作用相似,都是用來從函式中返回值。return語句一旦執行會立刻結束函式的執行,而每次執行到yeild語句並返回乙個值之後會暫停或掛起後面**的執行,下次通過生成器物件的__next__(),內建函式net(),for迴圈遍歷生成器物件元素或其他方式顯式「索要」資料時恢復執行。

生成器具有惰性求值的特點。

>>

>

deff()

:#求斐波那契數列..

. a,b =1,

1...

while

true:.

..yield a..

. a, b = b, a+b..

.>>

> a = f(

)>>

>

for i in

range(10

):..

.print

(a.__next__(

),end=

' ')

#呼叫一次__next__()得出乙個值..

.112

35813

2134

55a = f(

)>>

>

next

(a)1

>>

>

next

(a)1

>>

>

next

(a)2

>>

> a.__next__(

)3

>>

>

deff()

:...

yield

from

'abcdefg'..

.>>

> x = f(

)>>

>

next

(x)'a'

>>

>

for item in x:..

.print

(item,end=

' ')..

.b c d e f g

>>

>

defgen()

:...

yield1.

..yield2.

..yield3.

..>>

> x,y,z = gen(

)#序列解包

>>

>

print

(x,y,z)12

3

>>

>

defgen

(start, end)

:#使用send()方法傳入新值。..

. i = start..

.while i. v =

(yield i)..

.if v:..

. i = v..

.else:.

.. i+=1.

..>>

> g = gen(1,

101)

>>

>

next

(g)1

>>

>

next

(g)2

>>

> g.send(10)

10>>

>

next

(g)11

python生成器函式 Python 生成器函式

一 生成器 生成器指的是生成器物件,可由生成器表示式得到,也可使用 yield 關鍵字得到乙個生成器函式,呼叫這個函式得到乙個生成器物件 生成器物件,是乙個可迭代物件,是乙個迭代器 生成器物件,是延遲計算 惰性求值的 1.1 生成器函式 函式體重包含 yield 語句的函式,就是生成器函式,呼叫後返...

生成器函式

pyhon優雅的魔力使生成器函式很特殊,它們像定格相機一樣工作。當乙個標準函式遇到return語句時,它會返回值,然後函式會丟棄內部的所有資料。當下次呼叫時,一切從頭開始。yield語句會做不同的事情。它像return一樣返回乙個值,但是它不會使函式丟棄資料,相反所有資料都被儲存起來。usr bin...

生成器函式

什麼是生成器 生成器是能夠動態提供資料的物件,生成器物件也是可迭代物件 例項 生成器有兩種 生成器函式 生成器表示式 生成器函式的呼叫將返回乙個生成器的物件,生成器物件是乙個可迭代物件 defmyyield 此函式為生成器函式 yield 2yield 3yield 5yield 7 此時生成乙個生...