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

 

 

 

 

 

 

 

posted @ 2019-11-21 17:51  槑槑DE  阅读(796)  评论(0编辑  收藏  举报