yield是python中定義為生成器函數,其本質是封裝了 ?__iter__和__next__方法 ? 的叠代器;
與return返回的區別:return只能返回壹次值,函數就終止了,而yield能多次返回值,每次返回都會將函數暫停,下壹次next會從上壹次暫停的位置繼續執行;
以下用示例說明:
def?test(a,b):
print("from?test(),a+b=%d"?%(a+b))
return("我是return返回的")
def?test_yield(a,b): #函數體中有yield關鍵字,函數就可以稱為生成器函數
print("from?test_yield,a+b=%d"?%(a+b))
yield("我是第壹次碰到yield關鍵字返回的") #程序運行時碰到yield,退出函數體並記錄位置,下次調用跳過之前運行的代碼
print("from?test_yield,a*2=%d"?%(a*2))
yield("我是第二次調用碰到yield關鍵字返回的")
print(test(11,33))
g?=?test_yield(11,33)
print(next(g)) #通過next()調用生成器函數
print(next(g)) #第二次調用生成器函數
'''
執行結果:
from?test(),a+b=44
我是return返回的
from?test_yield,a+b=44
我是第壹次碰到yield關鍵字返回的
from?test_yield,a*2=22
我是第二次調用碰到yield關鍵字返回的
'''