首页 > 代码库 > 迭代器和生成器
迭代器和生成器
迭代器和和生成器都是容器对象。它们之间的关系是,生成器是一种特殊的迭代器。所以,先从迭代器入手。
迭代器:
python中,只要是实现了迭代协议的容器对象,都是迭代器。python的迭代器协议,基于两个方法:
·next() 返回下一个
·__iter__() 返回迭代器本身
如下就是一个迭代器:
python中的序列遍历完的时候抛出的StopIteration异常。而迭代器,迭代完成时也是抛出这个异常,这样迭代器和与循环式兼容的。都是捕捉到StopIteration异常来停止循环。
生成迭代器对象的两种方法:
1、使用iter()内置方法,使用该方法,可以将一个对象变为迭代器对象。
2、在类中定义迭代器的两个方法,满足迭代器协议。则,该类的对象就是迭代器对象。
1 class MyIteration(object): 2 """docstring for MyIteration""" 3 def __init__(self, setp): 4 self.step = step 5 6 def next(self): 7 8 if self.step == 0 : 9 raise StopIteration 10 self.step -= 1 11 return self.step 12 13 def __iter__(self): 14 return self
生成器:
生成器是一个特殊的迭代器,所以,也是有迭代器的特性。具有next()和__iter__()方法。不过,next()返回的是,yield指令放回的值。__iter__()方法,返回的是一个生产器对象。
生成器的使用不是很常见,虽然可以大大的简化了代码,但是对于我们这种从C,Java这样语言入门学习的人,这样的特性让我们感觉在思考上很别扭。程序猿不习惯这样的思路,但是这的确是一个很好的特性。将来要多多使用它来重构我的代码。
生成序列和循环执行的函数时,最好使用生成器。
生成器的一个有别于迭代器的重要特性,就是提供了代码的交互式。使用的时send()方法:
生成器还有一只简单的生成方式:
与列表推导式极其相似,只是[]被换成了()。
总结:
迭代器和生成器是python的两个很独特的容器对象。凸显了python的一个思想:“代码足够简单,而不是数据”。python提倡的简洁代码形式,生成器和迭代器都可以简单的几行代码,而操作一个负载的数据结构。
算法和数据的结构的实现,也应此变得简单。有空的话,我将用python来写写一些算法的实现。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。