python迭代器 发表于 2022-03-07 | 分类于 python | | 本文总阅读数 次 迭代器1234567891011121314151617181920212223242526272829303132333435363738394041# 迭代器类型的定义: 1.当类中定义了__iter__和__next__两个方法 2.__iter__方法需要返回对象本身,即:self 3.__next__方法,返回下一个数据,如果没有数据了,则需要抛出一个StopIteration的异常 # 创建迭代器类型class IT(object): def __init__(self): self.counter = 0 def __iter__(self): return self def __next__(self): self.counter += 1 if self.counter == 3: raise StopIteration() return self.counter # 根据类实例化创建一个迭代器对象:obj1 = IT()# v1 = obj1.__next__()# v2 = obj1.__next__()# v3 = obj1.__next__() # 抛出异常v1 = next(obj1) # obj.__next__()print(v1)v2 = next(obj1)print(v2)v3 = next(obj1)print(v3)obj2 = IT()for item in obj2: print(item) # 迭代器对象支持通过next取值,如果取值结束则自动抛出StopIteration。# for循环内部在循环时,先执行__iter__方法,获取一个迭代器对象,然后不断执行的next取值(有异常StopIteration则终止循环) 生成器12345678910111213141516171819202122# 创建生成器函数def func(): yield 1 yield 2# 创建生成器对象(内部时根据生产器类generator创建的对象),生成器类的内部也声明了:__iter__、__next__方法。obj1 = func()v1 = next(obj1)print(v1)v2 = next(obj2)print(v2)v3 = next(obj3)print(v3)obj2 = func()for item in obj2: print(item) # 如果按照迭代器的规定来看,其实生成器类也是一种特殊的迭代器类(生成器也是一个特殊的迭代器) 可迭代对象12345678910# 如果一个类中有__iter__方法且返回一个迭代器对象;则我们称以这个类创建的对象为可迭代对象class Foo(object): def __iter__(self): return 迭代器对象(生成器对象) obj = Foo() # obj是可迭代对象# 可迭代对象是可以使用for循环来进行循环,在循环内部其实是先执行__iter__方法,获取其迭代器对象,然后再在内部执行这个迭代器对象的next功能,逐步取值。for item in obj: pass