Discuss / Python / 改进廖老师Fib类中的__getitem__()方法,和大家分享

改进廖老师Fib类中的__getitem__()方法,和大家分享

Topic source

class Fib(object):
    def __init__(self):
        self.a = 0
        self.b = 1

    def __iter__(self):
        return self

    def __next__(self):
        self.a ,self.b = self.b ,self.a + self.b
        if self.a > 1000:
            raise StopIteration
        return  self.a

    def __getitem__(self, item):  ##这样实现我觉得更简单
        for x in range(item+1):
            z = self.__next__()
        return z


print(Fib()[0])
print(Fib()[1])
print(Fib()[2])
print(Fib()[3])

for x in Fib():
    print(x)

再来个带切片的改进版

def __getitem__(self, item):    #带切片的改进版
        if isinstance(item,int):
            for x in range(item+1):
                z = self.__next__()
            return z
        elif isinstance(item,slice): #slice是切片
            start = item.start
            stop = item.stop
            if start is None:
                start = 0
            L = []
            for i in range(stop):
                v = self.__next__()
                if i >= start:
                    L.append(v)
            return L

  • 1

Reply