迭代器
-
迭代:
-
可迭代对象:
-
如何判定一个对象是否为可迭代对象呢?
-
迭代器
-
迭代器是一种可以被遍历的对象,并且能作用于next()函数。
-
性质:
-
迭代器通常要实现两个基本的方法:
iter()
和next()
。 -
注意:
-
如何创建一个迭代器呢?
-
使用next()方法获取迭代器的下一个元素:
-
from collections import Iterable #Iterable迭代类型 alist = [1,2,3] #将列表转换成迭代器对象 iter_alist = iter(alist) print(next(iter_alist)) print(next(iter_alist)) print(next(iter_alist))
-
from collections import Iterable #Iterable迭代类型 alist = [1,2,3] #将列表转换成迭代器对象 iter_alist = iter(alist) for item in iter_alist: print(item)
-
-
思考:迭代器的作用是什么?
-
总结:迭代器和可迭代的区别?
-
自定义迭代器
-
很多时候,为了让我们自己写的类成为一个迭代器,需要在类里实现
__iter__()
和__next__()
方法 -
#迭代生成指定范围数列的平方值 class IterObj(): #start和end规定了数列的范围(start-end) def __init__(self,start,end): self.start = start self.end = end self.index = 1#记录__next__被调用的次数 #直接返回迭代器对象即可 def __iter__(self): return self #在类的外部调用next函数,实际就是在执行迭代器对象的__next__方法 def __next__(self): if self.index > self.end: raise StopIteration value = self.index ** 2 self.index += 1 return value obj = IterObj(1,50000) #(1-5) for item in obj: print(item)
-
菲波那切数列实现
-
class IterObj(): def __init__(self,count): self.count = count self.index = 0 #记录生成了第几个元素 self.num1 = 0 self.num2 = 1 self.num3 = 1 def __iter__(self): return self def __next__(self): if self.index >= self.count: raise StopIteration value = self.num1 self.index += 1 self.num1,self.num2,self.num3 = self.num2,self.num3,self.num2+self.num3 return value obj = IterObj(10) for i in obj: print(i) #0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584
-
实现类似iter功能的类:可以使得将列表转换成迭代器
-
class IterObj(): #start和end规定了数列的范围(start-end) def __init__(self,alist): self.alist = alist self.index = 0 def __iter__(self): return self def __next__(self): if self.index >= len(self.alist): raise StopIteration value = self.alist[self.index] self.index += 1 return value alist = [1,2,3,4,5] obj = IterObj(alist) #iter(alist) for item in obj: print(item)
-