首先iter函数有两种形式
iter(iterable) -> iterator
iter(callable, sentinel) -> iterator
从对象中获取迭代器。在第一种形式中,参数必须提供它自己的迭代器,或者是一个序列。
在第二种形式中,调用callable,直到它返回标记。
仔细理解下面两段代码的差别也许会有所体会
class cat():
def __init__(self,name,age):
self.__name=name
self.__age=age
self.info=[self.__name,self.__age]
self.index=-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):
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):
print(it)
iter()函数有两个参数
理解
当只写第一个参数时,该参数应该是一个含有__iter__函数的对象,且该__iter__函数必须是返回一个<class 'callable_iterator'>的对象
当写第二个参数时,第一个参数对象是一个next方法,此时iter函数使用对象的next方法生成一个迭代器