## 生成器
是可以迭代的,但是你只可以讀取它一次,因為它並不把所有的值放在記憶體中,它是實時地生成資料:
>>> 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 此時生成乙個生...