1.迭代器
迭代是Python非常強(qiáng)大的功能之一,是訪問集合元素的一種方式。
迭代器是一個(gè)可以記住遍歷位置的對象,從集合的第一個(gè)對象開始,直到所有的元素被訪問完結(jié)束。
那究竟是什么叫迭代呢:當(dāng)我們使用一個(gè)循環(huán)來遍歷某個(gè)東西時(shí),這個(gè)過程本身就叫迭代。注意:迭代器迭代的元素只能往前不能后腿。
迭代器有兩個(gè)基本的方法:iter()和next()。
字符串,列表或元組對象都可用于創(chuàng)建迭代器,如下所示:
輸出結(jié)果:
此外,迭代器對象可以使用for語句進(jìn)行遍歷,如下所示:
輸出結(jié)果如下:
也可以使用next()函數(shù)實(shí)現(xiàn)上邊的功能:
Ps:其中,對于上面的next()函數(shù),它用于返回迭代器的下一個(gè)項(xiàng)目。詳細(xì)的語法格式如下:
next(iterator[, default])
解釋:iterator表示可迭代對象,在[, default]中,中括號[]表示該項(xiàng)是可選內(nèi)容,default用于設(shè)置在沒有下一個(gè)元素時(shí)返回該默認(rèn)值,如果不設(shè)置且又沒有下一個(gè)元素,則會觸發(fā)StopIteration異常。
2.生成器
在Python中,使用了yield的函數(shù)被稱為生成器(generator)。
調(diào)用生成器運(yùn)行的過程中,每次遇到yield時(shí)函數(shù)會暫停并保存當(dāng)前所有的運(yùn)行信息,返回yield的值, 并在下一次執(zhí)行next()方法時(shí)從當(dāng)前位置繼續(xù)運(yùn)行。
下面用yield實(shí)現(xiàn)斐波那契數(shù)列,如下所示:
跟普通函數(shù)不同的是,生成器是一個(gè)返回迭代器的函數(shù),只能用于迭代操作,更簡單點(diǎn)理解生成器就是一個(gè)迭代器。
調(diào)用一個(gè)生成器函數(shù),返回的是一個(gè)迭代器對象。
輸出結(jié)果如下:
什么情況下需要使用yield?
1.一個(gè)函數(shù)f,f返回一個(gè)list,這個(gè)list是動態(tài)計(jì)算出來的,并且這個(gè)list會占用很大內(nèi)存。這個(gè)時(shí)候,我們希望每次調(diào)用這個(gè)函數(shù)并使用迭代器進(jìn)行循環(huán)的時(shí)候一個(gè)一個(gè)的得到每個(gè)list元素而不是直接得到一個(gè)完整的list,通過這種方法可以節(jié)省內(nèi)存,這個(gè)時(shí)候yield就很有用。
2.yield就像斷點(diǎn),加了yield的函數(shù),每次執(zhí)行到有yield的時(shí)候,會返回yield后面的值并且函數(shù)會暫停,直到下次調(diào)用或迭代終止。
3.yield后面可以加多個(gè)數(shù)值(可以是任意類型),但返回的值是元組類型的。
海騰公告海騰數(shù)據(jù)最新新聞公告
400-6717-361
Copyright© 2004-2020 河南海騰電子技術(shù)有限公司 版權(quán)所有 經(jīng)營性ICP/ISP證 備案號:B1-20180452 豫公網(wǎng)安備 41019702002018號 電子營業(yè)執(zhí)照