yield 這個(gè)關(guān)鍵字充石,是指yield 聲明得變量贱纠,變成一個(gè)生成器輸出峻厚!在一個(gè)函數(shù)中响蕴,如果有這個(gè)關(guān)鍵字谆焊,python解釋器不再把其當(dāng)成一個(gè)普通函數(shù),而是當(dāng)成一個(gè)生成器浦夷,生成器每次生成得結(jié)果是yield后面得指辖试,在調(diào)用得時(shí)候,函數(shù)會(huì)執(zhí)行到y(tǒng)ield 輸出之后劈狐,這個(gè)函數(shù)先停止執(zhí)行罐孝,直到下一次調(diào)用得時(shí)候(使用生成器得next()方法,或者for方法遍歷肥缔,for遍歷也是內(nèi)部調(diào)用得next()這個(gè)方法去實(shí)現(xiàn)的)
例如一個(gè)斐波那契數(shù)列:
? ??斐波那契(Fibonacci)數(shù)列是一個(gè)非常簡(jiǎn)單的遞歸數(shù)列莲兢,除第一個(gè)和第二個(gè)數(shù)外,任意一個(gè)數(shù)都可由前兩個(gè)數(shù)相加得到
正常我們可以這樣遍歷打印出來:
? ??def fab(max):
???n, a, b = 0, 0, 1
???while n < max:
???????print b
???????a, b = b, a + b
???????n = n + 1
結(jié)果就是
但是改為這樣之后:
? ??def fab(max):
????n, a, b = 0, 0, 1
????while n < max:
????????yield b
????????# print b
????????a, b = b, a + b
????????n = n + 1
'''
這個(gè)函數(shù)就不是一個(gè)常規(guī)函數(shù),變成了一個(gè)生成器
? ? 要作為一個(gè)生成器去用改艇,要么for遍歷出來要么next()出來使用
yield from將調(diào)用一個(gè)子協(xié)程(也就是在一個(gè)協(xié)程中調(diào)用另一個(gè)協(xié)程)并直接獲得子協(xié)程的返回結(jié)果收班。