Python yield 關(guān)鍵字

參考:https://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do
Python 中的 yield 函數(shù)有 類似于 return的功能,其區(qū)別在于 return 返回之后就不會(huì)再進(jìn)入這個(gè)函數(shù)了,而 yield則會(huì)再次返回這個(gè)函數(shù)
這在當(dāng)你需要返回的數(shù)據(jù)量特別大的時(shí)候,用 return返回會(huì)占據(jù)很大的內(nèi)存空間,如果使用yiled加上for等就可以實(shí)現(xiàn)迭代返回,每次需要多少就返回多少,減少內(nèi)存的占用。
比如以下函數(shù):

def f1():
    a = [1,2,3,4,5]
    b = [6,7,8,9,0]
    for i, j in zip(a,b):
        print("f1: ",(i,j))
        yield i,j

def f2():
    c = f1()
    for i, j in c:
        print("f2: ",(i,j))
        yield i,j

z = f2()
for i, j in z:
    print("Main",(i,j))

執(zhí)行以上程序,其輸出為:

('f1: ', (1, 6))
('f2: ', (1, 6))
('Main', (1, 6))
('f1: ', (2, 7))
('f2: ', (2, 7))
('Main', (2, 7))
('f1: ', (3, 8))
('f2: ', (3, 8))
('Main', (3, 8))
('f1: ', (4, 9))
('f2: ', (4, 9))
('Main', (4, 9))
('f1: ', (5, 0))
('f2: ', (5, 0))
('Main', (5, 0))

可以看到,when you call the function, the code you have written in the function body does not run.

  • 當(dāng)調(diào)用這個(gè)函數(shù)時(shí),函數(shù)中的代碼并沒有被執(zhí)行,而是等到for迭代時(shí)才跳回去執(zhí)行代碼;
  • 調(diào)用這個(gè)函數(shù) 比如 z=f2(),只是返回一個(gè) generator object,f2函數(shù)里面的 for 循環(huán)并沒有被立即執(zhí)行。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容