python中yield的用法介紹

2021-09-29 22:32:40 字數 2589 閱讀 7822

yield必須在函式內使用。乙個例子如下:

def

func()

:print

("starting-----"

) num=

0while num<10:

num=num+

1yield num

這個函式做了什麼?它產生了從1到10是個數字。誰產生的,怎麼產生的?yield num這句話產生的。那麼怎麼訪問這十個數字呢。我們說了,yield所在函式被呼叫返回的是物件,那麼就從這個物件上下文章。

gen=func(

)print

("access gen"

)for g in gen:

print

(g)

輸出結果

access gen

starting-----12

3456

78910

defs(

):print

('study yield'

) m =

yield

5print

(m) d =

yield

16print

(str

(d)+

'llll'

)

我們不執行結果,先分析一下,這個函式發生了什麼?這裡有兩個yield,可以認為函式s可以返回兩個數字5 和16.我們通過例項來分析一下:

gen=s(

)print

('************'

)for g in gen:

print

(g)

返回結果如下:

************

study yield

5none

16nonellll

可以看到在print(m)時返回的是none,這是為什麼?原因在於yield相當於return。把m通過yieldreturn了,當然沒有資料。

c = s(

)print

(next

(c))

# 相當於send(none)

f=c.send(

'fighting!'

)# (yield 5)表示式被賦予了'fighting!'

print

(f)print

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

)

執行結果

study yield

5fighting!

16-----------

那麼當所有斷點執行完了,再next會發什麼。我們在上面**增加兩個如下所示:

c = s(

)print

(next

(c))

# 相當於send(none)

print

('************'

)f=c.send(

'fighting!'

)# (yield 5)表示式被賦予了'fighting!'

print

(f)print

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

)ff=c.send(

"hello"

)print

(ff)

返回結果如下:

study yield

5************

fighting!

16-----------

hellollll

ff=c.send(

"hello"

)stopiteration

發生報錯, ff=c.send(「hello」) stopiteration。這說明當不存在下乙個yield再進行next或者send時,程式出錯。

yield是生成器,可以節省記憶體空間。為什麼用這個生成器,是因為如果用list的話,會占用更大的空間,比如說取0,1,2,3,4,5,6…1000。用第乙個例子的方法則節省不少記憶體空間。

def

compute

(a,b)

:return a*a+

2*a+b

deflistc

(i,j)

: result=

while i<5:

) i=i+

1return result

list_result=listc(0,

1)for ll in list_result:

print

(ll)

print

('*********xx'

)def

gen(i,j)

:while i<5:

yield compute(i,j)

i=i+

1gen=gen(0,

1)for g in gen:

print

(g)

Python中的yield用法

在python中,我們將帶有 yield 的函式稱之為 generator 生成器 generator可以一邊迴圈一邊計算,是可迭代物件,也就是說可以使用for迴圈來迭代出generator的各個值。一般為了說明generator,都會使用斐波那契數列來舉例,這裡也不例外 如結果所示,呼叫 fab ...

Python中的yield用法

yield關鍵字用來定義生成器 generator 其具體功能是可以當return使用,從函式裡返回乙個值,不同之處是用yield返回之後,可以讓函式從上回yield返回的地點繼續執行。也就是說,yield返回函式,交給呼叫者乙個返回值,然後再 瞬移 回去,讓函式繼續執行,直到嚇一條yield語句再...

python中 yield的用法

接下來是正題 首先,如果你還沒有對yield有個初步分認識,那麼你先把yield看做 return 這個是直觀的,它首先是個return,普通的return是什麼意思,就是在程式中返回某個值,返回之後程式就不再往下執行了。看做return之後再把它看做乙個是生成器 generator 的一部分 帶y...