栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python的生成器和迭代器之间的区别

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python的生成器和迭代器之间的区别

iterator
是一个更笼统的概念:其类具有next方法(
__next__
在Python 3中)和具有
__iter__
方法的任何对象
return self

每个生成器都是一个迭代器,但反之亦然。生成器是通过调用具有一个或多个yield表达式(yield在Python 2.5及更早版本中为语句)的函数而构建的,并且该函数是满足上一段对的定义的对象

iterator

当你需要一个具有某些复杂的状态维护行为的类时,或者想要暴露除

next
(和
__iter__
__init__
)之外的其他方法时,你可能想使用自定义迭代器,而不是生成器。通常,一个生成器(有时,对于足够简单的需求,一个生成器表达式)就足够了,并且它更容易编写代码,因为状态维护(在合理范围内)基本上是由挂起和恢复帧“为你完成的”。

例如,生成器例如:

def squares(start, stop):    for i in range(start, stop):        yield i * igenerator = squares(a, b)

或等效的生成器表达式(genexp)

generator = (i*i for i in range(a, b))

将需要更多代码来构建为自定义迭代器:

class Squares(object):    def __init__(self, start, stop):       self.start = start       self.stop = stop    def __iter__(self): return self    def next(self): # __next__ in Python 3       if self.start >= self.stop:raise StopIteration       current = self.start * self.start       self.start += 1       return currentiterator = Squares(a, b)

但是,当然,有了类,Squares你可以轻松地提供其他方法,即

    def current(self):       return self.start

如果你对应用程序中的此类额外功能有实际需求。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/517603.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号