自定义可迭代类 & yield

来源:互联网 发布:随身淘宝:皇家小地主》 编辑:程序博客网 时间:2024/05/13 17:05

可迭代类

重载以下两个函数既可以实现类的可迭代功能。

__iter__

__next__

class A:def __init__(self):self.data = [1,2,3]self.idx = 3def __iter__(self):return selfdef __next__(self):if self.idx > 0:self.idx -= 1return self.data[self.idx]else:raise StopIterationfor i in A():print(i)


yield函数

yield函数只能用在Generator中,yield函数是一个特殊的实现,如下面代码所示,

在第一次调用next后,执行语句

print('before yield')yield n

下一次执行时会继续执行,如果没有数据的时候,yield会返回StopIteration异常,在for语句中不需要捕获这个异常,会自动停止迭代。

def generator(n):print('before yield')yield nprint('after yield')g = generator(10)print(next(g))print(next(g))#输出结果before yield10after yieldTraceback (most recent call last):  File "tmp.py", line 8, in <module>    print(next(g))StopIteration

用for语句访问

def generator(n):print('before yield')yield nprint('after yield')for i in generator(10):print(i)#输出结果为before yield10after yield

<完>



0 0
原创粉丝点击