Python生成器函式 yield 協程應用

2021-09-18 06:45:31 字數 3130 閱讀 1565

生成器應用

m =

(i for i in

range(5

))print

(type

(m))

# 列印結果(型別) 生成器

print

(next

(m))

# 列印結果 0

definc()

:for i in

range(5

):yield i

print

(type

(inc)

)# 列印結果(型別) 函式

print

(type

(inc())

) `` # 列印結果(型別) 生成器

g = inc(

)print

(type

(g))

# 列印結果(型別) 生成器

print

(next

(g))

# 0for x in g:

print

(x)# 1 2 3 4

print

('-----------'

)for y in g:

print

(y)# 未列印

def

gen():

print

('line 1'

)yield

1print

('line 2'

)yield

2print

('line 3'

)return

3yield

4next

(gen())

# line1

next

(gen())

# line1

g = gen(

)#用變數記住gen函式,這樣在此進行使用時就可以延續上一次未完成的

print

(next

(g))

# line 1 1

print

(next

(g))

# line 2 2

print

(next

(g))

# stopiteration

print

(next

(g,'end'))

# 沒有元素給個預設值

def

counter()

: i =

0while

true

: i +=

1yield i

c = counter(

)print

(next

(c))

# 列印 1

print

(next

(c))

# 列印 2

print

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

)print

(g()

)# 列印 1

print

(g()

)# 列印 2

print

(g()

)# 列印 3

def

fib():

x =0 y =

1while

true

:yield y

x, y = y, x + y

foo = fib(

)for i in

range(10

):# 前10項

print

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

)print

(foo())

print

(foo())

print

(foo())

print

(foo(

true))

print

(foo())

print

(foo())

print

(foo(

))

def

foo():

for x in

range(5

):yield x

#等價於

deffoo()

:yield

from

range(5

)add = foo(

)print

(next

(add)

)# 列印結果 0

print

(next

(add)

)# 列印結果 1

print

(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 函式,訪問下乙個狀態。具備可迭代性。但是,如果打造乙個自己的迭代器,比較複雜,需要實現很多方法 在後續的面相物件程式設計中會講解 所以,就有乙個更加優雅的方式 生成器...