python中关于iter的使用

主要分析在类中使用迭代器

仔细理解下面两段代码的差别也许会有所体会


class cat():
    def __init__(self,name,age):
        self.__name=name
        self.__age=age
        self.info=[self.__name,self.__age]
        self.index=-1

    # def __iter__(self):     #此时可以不用谢__iter__写了也没用
    #     print("iter 调用了名字 年龄")
    #     print(type(iter(self.__next,1)))
    #     return iter(self.__next,1)

    def next(self):  #有区别
        if (len(self.info)-1)==self.index:
            raise  StopIteration
        self.index+=1
        return self.info[self.index]
if __name__=="__main__":
    c1=cat("小猫",12)
    for it in iter(c1.next,1):  #这里无法直接使用iter(c1) 这个函数此时应该是使用next方法生成迭代器
        print(it)
class cat():
    def __init__(self,name,age):
        self.__name=name
        self.__age=age
        self.info=[self.__name,self.__age]
        self.index=-1

    def __iter__(self):  #有区别
        print("iter 调用了名字 年龄")
        print(type(iter(self.__next,1)))
        return iter(self.__next,1)

    def __next(self):  #有区别
        if (len(self.info)-1)==self.index:
            raise  StopIteration
        self.index+=1
        return self.info[self.index]
if __name__=="__main__":
    c1=cat("小猫",12)
    print(type(iter(c1)))
    for it in iter(c1):  #使用c1.__iter__()方法生成迭代器
        print(it)

iter()函数有两个参数 

理解

当只写第一个参数时,该参数应该是一个含有__iter__函数的对象,且该__iter__函数必须是返回一个<class 'callable_iterator'>的对象

当写第二个参数时,第一个参数对象是一个next方法,此时iter函数使用对象的next方法生成一个迭代器

猜你喜欢

转载自blog.csdn.net/qq_36414969/article/details/83117642
今日推荐