码迷,mamicode.com
首页 > 编程语言 > 详细

Python 迭代器和 生成器

时间:2014-12-23 00:24:52      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

一直以为 Python 的生成器是指 列表生成, 好吧,我读书少。

其实呢,生成器是 使用yield 返回实现了迭代器协议的generator 对象。 如下:

class Data(object):
    def __init__(self, *args):
        self._data = list(args)
    def __iter__(self):
        for x in self._data:
            yield x
    d = Data(1,2,3)
    >>> d.__iter__()
    <generator object __iter__ at 0x7f8556d4cdc8>

在python2 中 使用d.next() 可以返回 d 的下一个值,
在 python3 中 需要使用 d.next() 返回 d 的生成器的下一个值, 生成器可用于 协程够造。

关于迭代器
根据迭代器协议, 需要实现iter() 和 next() 两个方法, 前者返回迭代器对象,后者返回数据,直到引发StopIteration 异常结束。

class Data(object):
def __init__(self, *args):
    self.data = list(args)
    self.index = 0
def __iter__(self):
    return self
def __next__(self):
    if self.index < len(self.data):
        d =  self.data[self.index]
        self.index +=1
    else:
        raise StopIteration()
    return d

Python 迭代器和 生成器

标签:

原文地址:http://my.oschina.net/innovation/blog/359377

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!