可以直接作用于for循環(huán)的對(duì)象統(tǒng)稱為可迭代對(duì)象:Iterable
可使用isinstance()方法來判斷一個(gè)對(duì)象是否為可迭代對(duì)象。
兩類可迭代對(duì)象:
? 1、集合型數(shù)據(jù)(list、tuple、dict、set、str等)
? 2、generator(包括生成器和帶yield的generator function)
而生成器不但可以作用于for循環(huán),還可以被next()函數(shù)不斷調(diào)用并返回下一個(gè)值,直到最后拋出StopIteration錯(cuò)誤表示無法繼續(xù)返回下一個(gè)值了。
可以被next()函數(shù)調(diào)用并不斷返回下一個(gè)值的對(duì)象稱為迭代器:Iterator。
可以使用isinstance()判斷一個(gè)對(duì)象是否是Iterator對(duì)象。
生成器都是Iterator對(duì)象,但list、dict、str雖然是Iterable,卻不是Iterator(后者不能用next()方法調(diào)用)。
從性質(zhì)上看,是因?yàn)镮terator對(duì)象表示一個(gè)數(shù)據(jù)流,可被next()調(diào)用并不斷返回下一個(gè)數(shù)據(jù),直到無數(shù)據(jù)是拋出錯(cuò)誤。只在需要返回下一個(gè)數(shù)據(jù)時(shí)才會(huì)計(jì)算,所以才不會(huì)像列表生成式那樣占用內(nèi)存,甚至Iterator可以表示一個(gè)無限大的數(shù)據(jù)流,例如全體自然數(shù),而這對(duì)于list來說是永遠(yuǎn)不可能的。