from collections.abc import Iterator, Iterable class Person(): def __init__(self): self.i = 1 def __iter__(self): return self def __next__(self): if self.i <= 100: ret = self.i self.i += 1 return ret print(next(Person())) print(next(Person())) print(next(Person()))
上述代码是我自定义的迭代器,通过isinstance判断是可迭代对象,也是迭代器
后面通过next想获取值,刚开始不知道为什么next那么多次了还是1,理想中的运行结果应该是1,2,3的。
后面通过调试,才知道。原来Person()其实就是实例化了一个对象,Person()了3次,也就是实例化了3个对象。这样每个对象的引用肯定是不一样的。
也就相当于next(Pserson())了3次,每次都只是获取1而已,后面的2,3,....其实是永远获取不到的。
除非先实例化一个对象p=Person(),然后通过next(f)方法调用3次,就能得到想要的结果1,2,3。
Python初始者wgx的第一编文章