Python問題8:生成器和迭代器的區(qū)別?
2022-11-11 19:25 作者:夏老師學(xué)習(xí)谷 | 我要投稿
迭代器是一個更抽象的概念,任何對象,如果它的類有?next?方法和iter?方法返回自己本身,它就是可迭代的。對于?string、list、dict、tuple?等這類容器對象,使用for循環(huán)遍歷是很方便的,for?語句實(shí)際上會對容器對象調(diào)用?iter()?函數(shù)。iter()?會返回一個定義了?next()?方法的迭代器對象,它在容器中逐個訪問容器內(nèi)元素,在沒有后續(xù)元素時,next()會拋出一個StopIteration異常。
生成器(Generator)是創(chuàng)建迭代器的簡單而強(qiáng)大的工具。它們寫起來就像是正規(guī)的函數(shù),只是在需要返回?cái)?shù)據(jù)的時候使用yield語句。生成器能做到迭代器能做的所有事,而且因?yàn)樽詣觿?chuàng)建iter()和next()方法,生成器顯得特別簡潔,而且生成器也是高效的,使用生成器表達(dá)式取代列表解析可以同時節(jié)省內(nèi)存。除了創(chuàng)建和保存程序狀態(tài)的自動方法,當(dāng)發(fā)生器終結(jié)時,還會自動拋出StopIteration異常。
標(biāo)簽: