首页 > 编程 > Python > 正文

python特性(五):序列诱导的迭代器

2019-11-08 03:08:50
字体:
来源:转载
供稿:网友

如果我们自己要实现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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表