生成器應用
m =
(i for i in
range(5
(type
(m))
# 列印結果(型別) 生成器
(next
(m))
# 列印結果 0
definc()
:for i in
range(5
):yield i
(type
(inc)
)# 列印結果(型別) 函式
(type
(inc())
) `` # 列印結果(型別) 生成器
g = inc(
(type
(g))
# 列印結果(型別) 生成器
(next
(g))
# 0for x in g:
(x)# 1 2 3 4
('-----------'
)for y in g:
(y)# 未列印
def
gen():
('line 1'
)yield
1print
('line 2'
)yield
2print
('line 3'
)return
3yield
4next
(gen())
# line1
next
(gen())
# line1
g = gen(
)#用變數記住gen函式,這樣在此進行使用時就可以延續上一次未完成的
(next
(g))
# line 1 1
(next
(g))
# line 2 2
(next
(g))
# stopiteration
(next
(g,'end'))
# 沒有元素給個預設值
def
counter()
: i =
0while
true
: i +=
1yield i
c = counter(
(next
(c))
# 列印 1
(next
(c))
# 列印 2
(next
(c))
# 列印 3
def
inc():
defcounter()
: i =
0while
true
: i +=
1yield i
c = counter(
)# def inner():
# return next(c)
# return inner
return
lambda
:next
(c)g = inc(
(g()
)# 列印 1
(g()
)# 列印 2
(g()
)# 列印 3
def
fib():
x =0 y =
1while
true
:yield y
x, y = y, x + y
foo = fib(
)for i in
range(10
):# 前10項
(next
(foo)
)
def
inc():
defcounter()
: i =
0while
true
: i +=
1 response =
yield i
if response is
notnone
: i = response
c = counter(
)return
lambda x=
false
:next
(c)if
not x else c.send(0)
foo = inc(
(foo())
(foo())
(foo())
(foo(
true))
(foo())
(foo())
(foo(
))
def
foo():
for x in
range(5
):yield x
#等價於
deffoo()
:yield
from
range(5
)add = foo(
(next
(add)
)# 列印結果 0
(next
(add)
)# 列印結果 1
(next
(add)
)# 列印結果 2
python生成器函式 Python 生成器函式
一 生成器 生成器指的是生成器物件,可由生成器表示式得到,也可使用 yield 關鍵字得到乙個生成器函式,呼叫這個函式得到乙個生成器物件 生成器物件,是乙個可迭代物件,是乙個迭代器 生成器物件,是延遲計算 惰性求值的 1.1 生成器函式 函式體重包含 yield 語句的函式,就是生成器函式,呼叫後返...
python 生成器函式
python 函式的定義體中有 yield 關鍵字,該函式就是生成器函式。呼叫生成器函式時,會返回乙個生成器物件。生成器函式的定義體執行完畢後,生成器物件會丟擲stopiteration 異常。def gen a print start yield 1 print starting yield 2 ...
python函式 生成器
1.生成器 是乙個特殊的迭代器 迭代的抽象層級更高 所以,擁有迭代器的特性,惰性計算資料,節省記憶體。能夠記錄下狀態,並通過next 函式,訪問下乙個狀態。具備可迭代性。但是,如果打造乙個自己的迭代器,比較複雜,需要實現很多方法 在後續的面相物件程式設計中會講解 所以,就有乙個更加優雅的方式 生成器...