迭代器
1、迭代器是访问集合元素的一种方式;是可以记住遍历位置的对象;
2、迭代对象从集合的第一个元素开始访问,直到所有的元素被访问结束;迭代器只能往前不能往后推
3、迭代器的两种方法:iter()和next()
#字符串、列表或元组对象都可以创建迭代器
l = range(5) it = iter(l) #创建迭代对象 print(next(it)) #返回:0 print(next(it)) #返回:1 print(next(it)) #返回:2 print(next(it)) #返回:3 print(next(it)) #返回:4 print(next(it)) #报错:StopIteration
#迭代对象用for循环遍历
l1 = range(5,11) it1 = iter(l1) #创建迭代对象 for i in it1: print(i,end = " ") #执行代码返回:5 6 7 8 9 10
#使用next()函数
mport sys #引入sys模块 l3 = range(11,16) it3 = iter(l3) while True: try: print(next(it3)) #创建迭代对象 except StopIteration: sys.exit()
#执行返回:
11
12
13
14
15
创建一个迭代器
把类作为一个迭代器使用,需要在勒种实现两个方法__iter__()与__next__()
class MyNumber: def __iter__(self): self.a = 1 return self def __next__(self): x = self.a self.a += 1 return x myclass = MyNumber() myiter = iter(myclass) print(next(myiter)) print(next(myiter)) print(next(myiter)) #执行代码 #1 #2 #3
StopIteration 异常用于标识迭代的完成,防止出现无限循环;
在__next()__方法中可设置完成循环的次数后,出发异常来结束循环
class MyNumber1(): def __iter__(self): self.a = 1 return self def __next__(self): if self.a <= 10: x = self.a self.a += 1 return x else: raise StopIteration myclass1 = MyNumber1() myiter1 = myclass1 for i in myiter1: print(i)