在 Python 中,迭代器(Iterator)是一种通过循环访问数据集合的方式,可以逐个访问集合中的元素,而不需要提前将整个集合加载到内存中。Python 中的迭代器通常是基于可迭代对象(Iterable)来实现的,例如列表、元组、字典、字符串等。
生成器(Generator)是一种特殊的迭代器,可以在每次循环中动态地生成数据,而不是一次性生成所有数据。生成器非常适合处理大量数据,因为它们只在必要时才计算并生成需要的数据,而不是一次性生成所有数据占用大量内存。
它们之间的区别在于,迭代器是一种通过定义类来实现的,必须实现 __iter__()
和 __next__()
两个方法,每个方法的含义、用法和返回值在实现时都需要考虑到所有细节。而生成器则比较简单,可以通过关键字 yield
来生成数据,每次调用生成器时会自动从上一个 yield
语句处继续执行,直到生成器结束或者遇到 return
语句。在 Python 中,生成器通常通过函数来定义,例如:
def my_generator(num):
for i in range(num):
yield i
该生成器函数用于生成 0
至 num - 1
的整数,可以通过 for
循环来访问生成器中的元素,例如:
for item in my_generator(10):
print(item)
这里的 my_generator(10)
返回一个生成器对象,它会动态地生成 0
至 9
的整数,循环直到生成器结束或者遇到 return
语句。