如果我们自己要实现iter方法,通过一个序列对象构造出一个迭代器,会怎么做呢?
首先需要定义一个迭代器类。
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类的定义完全类似,所不同的是,每次执行next方法,返回的不再是start - 1,而是序列对象的第start - 1个元素。测试这个迭代器的运行效果
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()输出结果为135abc有了MyIterorFromSequence的定义,iter方法的实现就很简单了。def myiter(sequence): return MyIteratorFromSequence(sequence)注意:上面的代码实现的功能比内置的iter方法要简单许多。因为我们只实现了序列对象到迭代器对象的构造。有了上面的分析,下面代码的输出就在情理之中了。
mylist = [1, 2, 3]myiter = iter(mylist)mylist.append(4)for i in myiter: print i输出结果为
1234
新闻热点
疑难解答