如果我們自己要實(shí)現(xiàn)iter方法,通過一個序列對象構(gòu)造出一個迭代器,會怎么做呢?
首先需要定義一個迭代器類。
class MyIteratorFromSequence: def __init__(self, sequence): self.start = 0 self.sequence = sequence def next(self): if self.start >= len(self.sequence): raise StopIteration self.start = self.start + 1 return self.sequence[self.start - 1] def __iter__(self): return self上面的代碼和博文中MyIterator類的定義完全類似,所不同的是,每次執(zhí)行next方法,返回的不再是start - 1,而是序列對象的第start - 1個元素。測試這個迭代器的運(yùn)行效果
mylist = [1, 3, 5, 'a', 'b', 'c']myiter = MyIteratorFromSequence(mylist)PRint myiter.next()print myiter.next()print myiter.next()print myiter.next()print myiter.next()print myiter.next()輸出結(jié)果為135abc有了MyIterorFromSequence的定義,iter方法的實(shí)現(xiàn)就很簡單了。def myiter(sequence): return MyIteratorFromSequence(sequence)注意:上面的代碼實(shí)現(xiàn)的功能比內(nèi)置的iter方法要簡單許多。因?yàn)槲覀冎粚?shí)現(xiàn)了序列對象到迭代器對象的構(gòu)造。有了上面的分析,下面代碼的輸出就在情理之中了。
mylist = [1, 2, 3]myiter = iter(mylist)mylist.append(4)for i in myiter: print i輸出結(jié)果為
1234
新聞熱點(diǎn)
疑難解答