在Python中,yield
是一個(gè)關(guān)鍵字,用于定義生成器函數(shù)。生成器函數(shù)是一種特殊的函數(shù),它可以在執(zhí)行過(guò)程中暫停并保存當(dāng)前的狀態(tài),然后在下一次調(diào)用時(shí)繼續(xù)執(zhí)行。使用yield
關(guān)鍵字可以將生成器函數(shù)轉(zhuǎn)換為迭代器,使其可以逐個(gè)產(chǎn)生值。
yield
有兩個(gè)主要的用法:
用于定義生成器函數(shù):在函數(shù)體中使用yield
關(guān)鍵字可以將函數(shù)轉(zhuǎn)換為生成器函數(shù)。生成器函數(shù)在每次調(diào)用時(shí)都會(huì)返回一個(gè)生成器對(duì)象。通過(guò)調(diào)用生成器對(duì)象的__next__()
方法或者使用next()
函數(shù)來(lái)逐步執(zhí)行函數(shù)體中的代碼,當(dāng)遇到yield
語(yǔ)句時(shí),函數(shù)會(huì)暫停執(zhí)行并返回yield
關(guān)鍵字后面的值,并保存當(dāng)前的狀態(tài)。下一次調(diào)用生成器對(duì)象時(shí),函數(shù)會(huì)從之前暫停的地方繼續(xù)執(zhí)行,直到遇到下一個(gè)yield
語(yǔ)句或者函數(shù)結(jié)束。
示例:
def generator():
yield 1
yield 2
yield 3
gen = generator()
print(next(gen)) # 輸出:1
print(next(gen)) # 輸出:2
print(next(gen)) # 輸出:3
用于迭代生成器對(duì)象:yield
關(guān)鍵字可以在生成器對(duì)象中使用,用于返回值并將控制權(quán)交給調(diào)用者,然后等待調(diào)用者再次調(diào)用生成器對(duì)象。這樣可以實(shí)現(xiàn)按需生成值的效果,而不需要一次性生成所有值。
示例:
def generator():
for i in range(5):
yield i
gen = generator()
for value in gen:
print(value) # 輸出:0 1 2 3 4
總結(jié):yield
關(guān)鍵字用于定義生成器函數(shù),并且可以在生成器對(duì)象中使用,用于返回值并暫停函數(shù)執(zhí)行。通過(guò)迭代生成器對(duì)象,可以逐個(gè)獲取生成器函數(shù)中yield
語(yǔ)句返回的值。