Python迭代器与生成器详解

0 下载量 164 浏览量 更新于2024-08-31 收藏 369KB PDF 举报
"Python 迭代器 生成器" 在Python编程中,迭代器和生成器是两个非常关键的概念,它们与数据处理和内存管理密切相关。迭代器允许我们遍历任何可迭代对象,而生成器则是一种高效且节省内存的迭代器实现方式。 迭代器: 迭代器是Python中的一个重要概念,它实现了迭代器协议,即包含`__iter__()`和`next()`两个方法。`__iter__()`方法用于返回迭代器对象,通常是调用者自身。`next()`方法则是返回容器的下一个元素,当容器没有更多元素时抛出`StopIteration`异常。在Python中,大多数内置容器类型如列表、字符串、字典等都是可迭代对象,可以通过`iter()`函数获取其迭代器。 例如,以下代码展示了如何使用迭代器遍历列表: ```python my_list = [1, 2, 3] iterator = iter(my_list) while True: try: element = next(iterator) print(element) except StopIteration: break ``` 自定义迭代器: 我们也可以自定义迭代器类,只需要实现`__iter__()`和`next()`方法。下面的`MyRange`类就是一个简单的例子,模拟了Python内置的`range`功能: ```python class MyRange: def __init__(self, n): self.idx = 0 self.n = n def __iter__(self): return self def next(self): # 在Python 3中应为 `__next__` if self.idx < self.n: val = self.idx self.idx += 1 return val else: raise StopIteration() ``` 生成器: 生成器是Python特有的一个特性,它是一种特殊的迭代器,通过使用`yield`关键字来暂停和恢复函数执行。生成器函数在被调用时并不立即执行,而是返回一个生成器对象。每次调用生成器的`next()`方法或在for循环中迭代时,才会执行到下一个`yield`语句并返回值。 下面是一个简单的生成器示例,用于生成斐波那契序列: ```python def fibonacci(n): a, b = 0, 1 for _ in range(n): yield a a, b = b, a + b for num in fibonacci(10): print(num) ``` 生成器的优势在于,它们在每次迭代时只计算当前需要的值,而不是一次性生成所有值,从而节省了大量的内存。这对于处理大数据集或无限序列尤为有用。 总结来说,Python的迭代器和生成器提供了强大的数据处理能力,允许我们以迭代的方式访问各种数据结构,同时通过生成器优化了内存使用。理解并熟练运用这两个概念,能帮助开发者编写更高效、更优雅的代码。