__iter__()|__iter__() 和 __next__()

要实现一个可迭代对象,比如一个类想被用于 for ... in 循环,类似 listtuple 那样,就必须实现一个 __iter__() 方法,该方法返回一个迭代对象,然后,Python 的 for 循环就会不断调用该迭代对象的 __next__() 方法拿到循环的下一个值,直到遇到 StopIteration 错误时退出循环。
【__iter__()|__iter__() 和 __next__()】我们以斐波那契数列为例,写一个 Fib 类,可以作用于 for 循环:

class Fib(object):def __init__(self, max_value): self.a, self.b = 0, 1 # 初始化两个计数器a,b self.max_value = https://www.it610.com/article/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

    推荐阅读