教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

迭代器和生成器的區(qū)別是什么?

更新時(shí)間:2023年02月22日16時(shí)30分 來(lái)源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

  對(duì)于list、dict、string、tuple等這類容器對(duì)象,使用for循環(huán)遍歷十分的方便。在后臺(tái)for語(yǔ)句對(duì)容器對(duì)象調(diào)用iter()函數(shù),iter()是Python的內(nèi)置函數(shù)。iter()會(huì)返回一個(gè)定義了next()方法的迭代器對(duì)象,它在容器中逐個(gè)訪問(wèn)容器內(nèi)的元素,next()也是Python的內(nèi)置函數(shù)。在沒(méi)有后續(xù)元素時(shí),next()會(huì)拋出一個(gè)StopIterration的異常。

  生成器(Generator)是創(chuàng)建迭代器的簡(jiǎn)單而強(qiáng)大的工具。它們寫起來(lái)就像是普通的函數(shù),只是在返回?cái)?shù)據(jù)的時(shí)候需要使用yield語(yǔ)句。每次next(0被調(diào)用時(shí),生成器會(huì)返回它脫離的位置(它記憶語(yǔ)句最后一次執(zhí)行的位置和所有的數(shù)據(jù)值)。

迭代器和生成器的區(qū)別是什么

  兩者的區(qū)別在于:生成器能做到迭代器能做的所有事,而且因?yàn)樽詣?dòng)創(chuàng)建了__iter__()和next()方法,生成器顯得特別簡(jiǎn)潔,而且生成器也是高效的,使用生成器表達(dá)式取代列表解析可以同時(shí)節(jié)省內(nèi)存。除了創(chuàng)建和保持程序狀態(tài)的自動(dòng)生成,當(dāng)發(fā)生器終結(jié)時(shí),還會(huì)自動(dòng)拋出StopIterration異常。

0 分享到:
和我們?cè)诰€交談!