Python的迭代器和生成器总结(2)
第一篇中的testB有点偷懒,直接在一个类中同时实现了__iter__和__next__方法。但是听培训老师的意思,常用的方法应该是分2个类来做的。如下面代码所示。后面加注释的地方,都是需要关注的设计点。
import collections
class ClassMate(object):
def __init__(self):
self.names = list()
def add(self, name):
self.names.append(name)
def __iter__(self):
return ClassIterator(self) #把自己放入迭代器中
class ClassIterator(object):
def __init__(self, obj):
self.obj = obj
self.current_num = 0 #实例属性,指定位置
def __iter__(self):
pass
def __next__(self):
if self.current_num < len(self.obj.names):
ret = self.obj.names[self.current_num]
self.current_num += 1 #在返回之前把指针指向下一个位置
return ret
else:
raise StopIteration #通过异常来退出,避免不存在的None
classMate = ClassMate()
classMate.add("zhangsan")
classMate.add("lisi")
classMate.add("wangwu")
for name in classMate:
print(name)
本文深入探讨Python中迭代器和生成器的实现方式,通过具体代码示例,展示如何自定义迭代器类和迭代器对象,实现对集合元素的逐个访问,避免一次性加载所有元素到内存,提高程序效率。

被折叠的 条评论
为什么被折叠?



