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

全國咨詢/投訴熱線:400-618-4000

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

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

好口碑IT培訓(xùn)

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

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

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

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

0 分享到:
和我們在線交談!