Python3基础-类的迭代器
迭代器协议
对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代(只能往后走不能往前退)
class People: def __init__(self,name,age): self.name = name self.age =age def __iter__(self): return self def __next__(self): self.age += 1 return self.age p1 = People('苏苏',18) print(p1.__next__()) print(p1.__next__()) print(next(p1)) print(next(p1))
以上代码执行结果如下:
19 20 21 22
class People: def __init__(self,name,age): self.name = name self.age =age def __iter__(self): return self def __next__(self): if self.age == 30: raise StopIteration("结束了吧") self.age += 1 return self.age p1 = People('苏苏',18) for i in p1: #obj=iter(p1) --->p1.__iter() print(' ',i,end='') #obj.__next__()
以上代码执行结果如下:
19 20 21 22 23 24 25 26 27 28 29 30
斐波那契数列,指的是这样一个数列:1、1、2、3、5、8、13、21、34、…【前面两个数之和是第三个数】
自己写的代码
Fibonacci_list=[] class Fibonacci_sequence: def __init__(self,num): self.num = num def __iter__(self): return self def __next__(self): if len(Fibonacci_list) < 2: Fibonacci_list.append(1) return Fibonacci_list[len(Fibonacci_list)-1] elif len(Fibonacci_list) < 10: snum=Fibonacci_list[len(Fibonacci_list)-1]+Fibonacci_list[len(Fibonacci_list)-2] Fibonacci_list.append(snum) return Fibonacci_list[len(Fibonacci_list)-1] else: raise StopIteration("结束了吧") p1 = Fibonacci_sequence(1) print(p1.__next__()) print(p1.__next__()) print(p1.__next__()) print(Fibonacci_list) for i in p1: print('',i,end='') print('\n',Fibonacci_list)
以上代码执行结果如下:
1 1 2 [1, 1, 2] 3 5 8 13 21 34 55 [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
更简单的代码如下
class Fib: def __init__(self): self._a =1 self._b =1 def __iter__(self): return self def __next__(self): if self._a > 100: raise StopIteration("结束了吧") self._a,self._b =self._b,self._a+self._b return self._b f1 = Fib() for i in f1: print(' ',i,end='')
以上代码执行结果如下:
2 3 5 8 13 21 34 55 89 144 233