|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
迭代器这一讲里- class Fibs:
- def __init__(self,n = 20):
- self.a = 0
- self.b = 1
- self.n = n
- def __iter__(self):
- return self
- def __next__(self):
- self.a, self.b = self.b, self.a + self.b
- if self.a > self.n:
- raise StopIteration
- return self.a
- fibs=Fibs(10)
- for each in fibs:
- print(each)
复制代码
有两个问题就是
1.在那个fibs类里面 是因为for 的输入触发了fibs中的__iter__和__next__这两个方法吗??
还是在什么时候将会触发上述两个方法
2.__next__中的raise在这里的作用是什么 求解答
1、__iter__和__next__这是课迭代对象的迭代器方法。当需要遍历该类对象的时候,会触发这两个函数。
for循环的 each in fibs 就是遍历 Fibs 类的对象 fibs ,因此会触发__iter__和__next__这两个函数。
2、raise主动抛出异常,这里抛出的 StopIteration 是迭代终止异常。在遍历可迭代对象的时候遇到 StopIteration 异常则会认为遍历结束,然后终止迭代。若__next__方法没有抛出 StopIteration 异常,则会是的for循环进入死循环。
在这里也就是当fibs.a>10的时候停止迭代,终止遍历。
|
|