请教Python 这个类for循环怎么理解?

class Fib(object):
def __init__(self):
self.a, self.b = 0, 1 # 初始化两个计数器a,b

def __iter__(self):
return self # 实例本身就是迭代对象,故返回自己

def __next__(self):
self.a, self.b = self.b, self.a + self.b # 计算下一个值
if self.a > 100000: # 退出循环的条件
raise StopIteration();
return self.a # 返回下一个值

for n in Fib(): # 怎么理解这个循环打印?
print(n)
Fib() 它返回一个 实例本身,又返回self.a 这又是干什么用的?

第1个回答  2017-02-21
在python语言中,for in 循环本身会自动调用对象的__next__()函数,直到遇到StopIteration这个异常退出循环,每次执行一次__next__()函数,并且将返回值赋给for后面的变量。
程序是这么运行的
for n in Fib():#Fib()是一个类,调用类名相当于定义一个对象
#也可以写成
#f=Fib()
#for n in f:
由于Fib()实现了,__next__()函数,自然要调用这个__next__()函数,结果是
self.a, self.b = self.b, self.a + self.b # 第一次,这句话执行后self.a=1,self.b=1
if self.a > 100000: #第一次不满足条件,因为self.a=1
raise StopIteration();#第一次不执行
return self.a # 返回1
由于第一次没有raise StopIteration没执行,所以继续下个循环。
self.a, self.b = self.b, self.a + self.b # 第二次,这句话执行后self.a=1,self.b=2
if self.a > 100000: #第二次不满足条件,因为self.a=1
raise StopIteration();#第二次不执行
return self.a # 返回1,输出1
由于第三次没有raise StopIteration没执行,所以继续下个循环。
self.a, self.b = self.b, self.a + self.b # 第三次self.a=2,self.b=3
if self.a > 100000: #第三次不满足条件,因为self.a=2
raise StopIteration();#第三次不执行
return self.a # 返回2,输出2
由于第四次没有raise StopIteration没执行,所以继续下个循环。
self.a, self.b = self.b, self.a + self.b # 第四次self.a=3,self.b=5
if self.a > 100000: #第四次不满足条件,因为self.a=3
raise StopIteration();#第四次不执行
return self.a # 返回3,输出3
...........一直循环,直到self.a大于100000
其实这个函数是返回斐波那契数列的一个类。
不明白可追问。本回答被提问者采纳
相似回答