當(dāng)我們學(xué)習(xí)Python的時(shí)候,會(huì)遇到很多專業(yè)的術(shù)語(yǔ)及工具,而對(duì)于這些很多人并不是很了解,比如說生成器和迭代器,Python的生成器和迭代器有什么區(qū)別?這是很多人都比較疑惑的問題,我們來看看吧。 迭代器是一個(gè)更抽象的概念,任何對(duì)象,如果它的類有NEXTiter方法返回自己本身,對(duì)于string、list、dict、tuple 等這類容器對(duì)象,使用for循環(huán)遍歷是很方便的。在后臺(tái)For語(yǔ)言對(duì)容器對(duì)象條用iter()函數(shù),iter()是Python的內(nèi)置函數(shù)。iter()會(huì)返回一個(gè)定義了next()方法迭代器對(duì)象,在容器中逐個(gè)訪問容器的元素,next()也是Python的內(nèi)置函數(shù),next()會(huì)拋出StopIteration異常。 生成器是創(chuàng)新迭代器的簡(jiǎn)單而強(qiáng)大的工具,它們寫起來就好像正則函數(shù),只是在需要返回?cái)?shù)據(jù)的時(shí)候使用yield 語(yǔ)句。 迭代器協(xié)議,對(duì)象需要提供next()方法,它要么返回迭代中的下一項(xiàng),要么就引起一個(gè)StopIteration異常,終止迭代。 可迭代對(duì)象,實(shí)現(xiàn)了迭代器協(xié)議對(duì)象。list、tuple、dict都是Iterable可迭代的對(duì)象,但不是Iterator迭代器對(duì)象。 |
|