列表生成式,迭代器,生成器

列表生成式

a = [i+1 for i in range(10)]
print (a)
#a=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

生成器

生成器不需要?jiǎng)?chuàng)建整個(gè)列表,節(jié)省內(nèi)存;
generator保存的是算法,每次調(diào)用next(generator),就計(jì)算出generator的下一個(gè)元素的值,直到計(jì)算到最后一個(gè)元素,沒有更多的元素時(shí),拋出StopIteration的錯(cuò)誤。
也可以通過for函數(shù)訪問

a = (i+1 for i in range(10))
print (a)
#<generator object <genexpr> at 0x117116050>
print (next(a))
#1
for g in a:
    print (g)
#1
#2
#3
...
#10

應(yīng)用:斐波那契數(shù)列

def fib(max):
    n,a,b=0,0,1
    while n<max:
        yield b
        a,b=b,b+a
        n += 1
print (fib(6))
for i in (fib(6)):
    print (i)

這就是定義generator的另一種方法。如果一個(gè)函數(shù)定義中包含yield關(guān)鍵字,那么這個(gè)函數(shù)就不再是一個(gè)普通函數(shù),而是一個(gè)generator:
函數(shù)是順序執(zhí)行,遇到return語句或者最后一行函數(shù)語句就返回。而變成generator的函數(shù),在每次調(diào)用next()的時(shí)候執(zhí)行,遇到y(tǒng)ield語句返回,再次執(zhí)行時(shí)從上次返回的yield語句處繼續(xù)執(zhí)行。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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