Python 迭代器与生成器
在Python编程中,处理数据集合和序列是一项常见任务。当我们需要遍历大量数据或者创建复杂的数据流时,迭代器和生成器就成为了非常强大的工具。它们不仅可以提高代码的性能,还能让我们的代码更加优雅和可读。
什么是迭代与迭代器
迭代的概念
迭代是指重复执行特定操作的过程,通常用于处理序列中的每个元素。在Python中,我们经常使用for
循环来迭代序列,如列表、元组、字典等。
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
输出:
apple
banana
cherry
当你使用for
循环遍历一个对象时,Python实际上在背后调用了迭代器机制。
迭代器的定义
**迭代器(Iterator)**是一个对象,它实现了迭代器协议,包含两个方法:
__iter__()
: 返回迭代器对象本身__next__()
: 返回下一个值,如果没有更多的值可以返回,则引发StopIteration
异常
可迭代对象(Iterable)是任何可以返回迭代器的对象,它实现了__iter__()
方法。
使用内置函数操作迭代器
Python提供了一些内置函数来操作迭代器:
iter()
: 从可迭代对象创建迭代器next()
: 获取迭代器的下一个值
# 创建一个迭代器
my_list = [1, 2, 3]
my_iterator = iter(my_list)
# 使用next()获取元素
print(next(my_iterator)) # 1
print(next(my_iterator)) # 2
print(next(my_iterator)) # 3
# 当没有更多元素时,会引发StopIteration异常
try:
print(next(my_iterator))
except StopIteration:
print("迭代器已经用尽")
输出:
1
2
3
迭代器已经用尽
创建自定义迭代器
你可以创建自己的迭代器类,只需实现__iter__()
和__next__()
方法:
class CountDown:
def __init__(self, start):
self.start = start
def __iter__(self):
return self
def __next__(self):
if self.start <= 0:
raise StopIteration
self.start -= 1
return self.start + 1
# 使用自定义迭代器
countdown = CountDown(5)
for i in countdown:
print(i)
输出:
5
4
3
2
1
生成器:简化迭代器的创建
生成器(Generator)是创建迭代器的简单而强大的工具。它使用yield
语句而不是return
语句返回值,每次生成一个值后会"暂停"函数的执行,保存所有的状态,下次继续执行时从暂停的地方继续。
生成器函数
使用yield