可迭代对象是Python中一个核心的概念,它指的是可以被for
循环遍历的对象。几乎所有的Python集合类型(如列表、元组、字典和集合)都是可迭代的、迭代器、生成器。
迭代器是遵循迭代器协议的对象,它允许我们逐个访问集合中的元素,而不需要一次性加载整个集合到内存中。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
在类中实现两个方法 __iter__() 与 __next__() 迭代器
class MyDatas:
def __init__(self, num):
self.data = [i for i in range(1, num + 1)]
self.current = 0
def __iter__(self):
return self
def __next__(self):
if self.current < len(self.data):
result = self.data[self.current]
self.current += 1
return result
else:
raise IndexError
md = MyDatas(5)
print(isinstance(md, Iterable), isinstance(md, Iterator))
while True:
try:
print(next(md))
except IndexError as e:
print()
break
生成器是一种特殊的迭代器,它使用yield
关键字来产生一个值,然后挂起函数的执行,直到下一次迭代器的调用。
def my_fun():
yield 1
yield 2
yield 4
yield 6
return 100
r = my_fun()
while True:
try:
print(next(r))
except StopIteration as e:
print("结束", e)
break
在某些情况下,使用生成器和迭代器可以显著提高程序的性能,尤其是在处理大量数据时。例如,生成器可以按需产生数据,而不是一次性加载所有数据到内存中,增强了代码的可读性和可维护性。