主要分析在类中使用迭代器
仔细理解下面两段代码的差别也许会有所体会
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方法生成一个迭代器