python中的迭代iterable

2019-12-04  本文已影响0人  陆寒晨

一、可迭代的类

python中,可迭代的类一般是实现了itrnext方法的类。如下面代码,实现了iternext函数之后,就可以直接用for in 去遍历它,调用next方法,使得类的遍历变得简单快速。

### 非波拉契数列,迭代类实现
class Fabi:
    def __init__(self, max):
        self.max = max
        self.n = 0
        self.a = 0
        self.b = 1

    def __iter__(self):
        return self

    def __next__(self):
        if self.n < self.max:
            r = self.b
            self.b = self.a + self.b
            self.a = r
            self.n = self.n + 1
            return r
        raise StopIteration


if __name__ == '__main__':
    fabi = Fabi(5)
    for ff in fabi:
        print(ff)

运行结果如下:


运行结果

二、yield函数

def ydFun(max=5):
    n, a, b = 0, 0, 1
    while n < max:
        r = b
        yield r
        n = n + 1
        b = a + b
        a = r


if __name__ == '__main__':
    fabi = ydFun(5)
    for i in fabi:
        print(i)

将在循环中需要抛出的数据换成yield即可生成迭代生成器。
程序输出如下图:


yield输出

yield中return的作用

在一个 generator function 中,如果没有 return,则默认执行至函数完毕,如果在执行过程中 return,则直接抛出 StopIteration 终止迭代。

【参考资料】
【1】https://www.runoob.com/w3cnote/python-yield-used-analysis.html

上一篇下一篇

猜你喜欢

热点阅读