要实现一个可迭代对象,比如一个类想被用于 for ... in
循环,类似 list
或 tuple
那样,就必须实现一个 __iter__()
方法,该方法返回一个迭代对象,然后,Python 的 for
循环就会不断调用该迭代对象的 __next__()
方法拿到循环的下一个值,直到遇到 StopIteration
错误时退出循环。
我们以斐波那契数列为例,写一个 Fib 类,可以作用于 for
循环:
class Fib(object):
def __init__(self, max_value):
self.a, self.b = 0, 1 # 初始化两个计数器a,b
self.max_value = max_value # 初始化最大值
def __iter__(self):
return self # 实例本身就是迭代对象,故返回自己
def __next__(self):
self.a, self.b = self.b, self.a + self.b # 计算下一个值
if self.a > self.max_value: # 退出循环的条件
raise StopIteration()
return self.a # 返回下一个值
我们用一个实例测试一下:
>>> fib = Fib(100)
>>> for i in fib:
print(i)
1
1
2
3
5
8
13
21
34
55
89
网友评论