自定义可迭代类 & 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
- 自定义可迭代类 & yield
- Ruby-自定义迭代器与yield方法
- yield
- yield
- yield()
- yield
- yield
- yield
- yield
- yield
- yield
- yield
- yield
- yield
- yield
- foreach/yield语句自定义IEnumerable和IEnumerator类型
- C#使用yield关键字让自定义集合实现foreach遍历的方法
- 了解 C# foreach 内部语句和使用 yield 实现的自定义迭代器
- MySql数据库索引的学习
- POJ 3083Children of the Candy Corn(DFS*2+BFS)
- c++-运算符的重载
- 树莓派驱动ov7670
- String
- 自定义可迭代类 & yield
- 安卓培训第三天
- WebServlet annotation examples
- Java 调用c/c++程序
- 大数据
- TI C66x DSP硬件信号量 - 4(Semaphore moudle)
- Looper
- 搞笑---
- bat脚本编译java工程并打jar包