如果我们自己要实现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()
输出结果为
1
3
5
a
b
c
有了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
输出结果为
1
2
3
4