Python中的迭代器创建

创建迭代对象有两种方法,分别是使用iter方法和直接实现一个class。

先看iter方法。iter有两种形式:一个是只有一个参数的,要求是这个参数必须是一个序列对象,每次迭代其实就是返回一个序列的下一个值。还有一个是有两个参数的,第一个是个callable对象,每次迭代就是返回这个callable对象的返回值,第二个参数是一个结束值,当callable对象的返回值是这个值的时候就结束迭代。
例子(使用iter并传递一个序列对象):

l = [1, 2, 3, 4, 5]

_l = iter(l)

for _ in _l:
    print _

输出就是:

1
2
3
4
5

例子(使用iter并传递一个callable对象和一个结束值):

class func:
    offset = 0
    items = [1, 2, 3, 4, 5]
    
    def __init__(self):
        pass

    def __call__(self):
        self.offset += 1
        return self.items[self.offset - 1]

f = func()

l = iter(f, 3)

for _ in l:
    print _

输出就是:

1
2

然后看类的实现方法。要通过类来实现迭代器,主要就是实现__iter__方法和next方法。__iter__一般是返回self,感觉就是个标记用的属性,告知别人这个是个迭代类。next方法比较重要,每次调用的时候返回一个值,都返回完后通过StopIteration抛出异常表示迭代结束。
一个例子:

class itobj:

    def __init__(self, data):
        self.iter = iter(data)

    def __iter__(self):
        return self

    def next(self):
        try:
            v = self.iter.next()
            return v
        except StopIteration:
            raise

i = itobj([1, 2, 3, 4, 5])

for _ in i:
    print _

输出就是:

1
2
3
4
5

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*