Python迭代器与生成器
Python 迭代器和生成器
Python 中的迭代器和生成器是用于处理可迭代对象的强大工具。它们有一些共同点,但也有一些重要的区别。
迭代器(Iterators):
- 迭代器是可迭代对象的一个子集。
- 它是一个可以记住遍历位置的对象。
- 迭代器需要实现
__iter__()
和__next__()
方法。 - 使用
iter()
方法可以将列表、元组、集合、字符串等可迭代对象转换为迭代器。 - 通过调用
next()
方法逐个访问元素。 - 不能通过索引来访问生成器的元素。
- 当没有更多元素可迭代时,
next()
方法会引发StopIteration
异常。
1 | # 创建一个可迭代对象(列表) |
在这个示例中,将列表my_list
转换为迭代器my_iterator
,然后使用next()
方法逐个访问迭代器的元素。当没有更多的元素可迭代时,next()
方法会引发StopIteration
异常,我们通过异常处理来结束循环。
生成器(Generators):
- 生成器是一种特殊的迭代器。
- 使用
yield
关键字替代return
返回值,将函数变成生成器对象。 - 生成器不会一次性生成所有值,而是按需生成每个值,这可以节省内存。
- 生成器只能被迭代一次,一旦耗尽,需要重新创建或重新初始化才能再次迭代。
- 不能通过索引来访问生成器的元素。
生成器是生成元素的,迭代器是访问集合元素的一种方式。
1 | # 创建一个生成器函数 |
迭代器用于按需访问集合元素,而生成器用于按需生成元素