python中的迭代iterable
2019-12-04 本文已影响0人
陆寒晨
一、可迭代的类
python中,可迭代的类一般是实现了itr和next方法的类。如下面代码,实现了iter 和next函数之后,就可以直接用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