为了账号安全,请及时绑定邮箱和手机立即绑定

构建一个基本的Python Iterator

构建一个基本的Python Iterator

红糖糍粑 2019-06-06 16:14:31
构建一个基本的Python Iterator如何在python中创建迭代函数(或迭代器对象)?
查看完整描述

3 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

python中的Iterator对象符合迭代器协议,这基本上意味着它们提供了两种方法:__iter__()next()..这个__iter__返回迭代器对象,并在循环开始时隐式调用。这个next()方法返回下一个值,并在每个循环增量处隐式调用。next()在没有更多值可返回时引发StopIteration异常,循环构造将隐式捕获该异常以停止迭代。

下面是一个简单的计数器示例:

class Counter:
    def __init__(self, low, high):
        self.current = low
        self.high = high    def __iter__(self):
        return self    def next(self): # Python 3: def __next__(self)
        if self.current > self.high:
            raise StopIteration
        else:
            self.current += 1
            return self.current - 1for c in Counter(3, 8):
    print c

这将打印:

3
4
5
6
7
8

正如前面的答案所述,使用生成器编写这一内容更容易:

def counter(low, high):
    current = low    while current <= high:
        yield current
        current += 1for c in counter(3, 8):
    print c

印刷输出将是相同的。在引擎盖下,生成器对象支持迭代器协议,并执行类似于类计数器的操作。

大卫·默茨的文章迭代器和简单生成器是个很好的介绍。


查看完整回答
反对 回复 2019-06-06
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

首先迭代工具模块对于迭代器可能有用的各种情况,都是非常有用的,但下面是在python中创建迭代器所需的全部内容:

产量

这不是很酷吗?产量可以用来代替正常值回归在一个函数中。它同样返回对象,但它不是销毁状态和退出,而是保存状态,以便在您想要执行下一次迭代时使用。下面是直接从迭代工具函数列表:

def count(n=0):
    while True:
        yield n
        n += 1

如函数描述中所述(这是计数()),它生成一个迭代器,返回从n开始的连续整数。

生成器表达式是另一罐蠕虫(可怕的虫子!)它们可以代替列表理解为了节省内存(列表理解在内存中创建一个列表,如果不分配给变量,则在使用后销毁,但是生成器表达式可以创建生成器对象.这是一种别出心裁的说法。下面是生成器表达式定义的示例:

gen = (n for n in xrange(0,11))

这与上面迭代器的定义非常相似,除非整个范围预定在0到10之间。

我刚找到xrange()(得知我以前没见过.)并将其添加到上面的示例中。xrange()的可迭代版本。范围()它的优点是没有预先建立列表。如果您有一个庞大的数据集来迭代,并且只有这么多的内存可以执行,这将是非常有用的。


查看完整回答
反对 回复 2019-06-06
  • 3 回答
  • 0 关注
  • 612 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信