python中yield的用法是什么

小億
117
2023-12-09 12:39:41

在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è)主要的用法:

  1. 用于定義生成器函數(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
    
  2. 用于迭代生成器對(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ǔ)句返回的值。

0