Python Relearning-Generator and Iterator
在 Python 中,理解和区分生成器(generators)和迭代器(iterators)是非常重要的,因为它们都与迭代(iteration)有关,但它们的工作方式和用途有所不同。
迭代器(Iterators)
迭代器是实现了 __iter__() 和 __next__() 方法的对象。迭代器对象知道如何返回序列中的下一个值,直到没有更多的值可以返回,此时会引发 StopIteration 异常。
迭代器的特点:
可以使用
next()函数来获取下一个值。只能向前迭代,不能后退。
只能迭代一次,迭代完成后就无法再次迭代。
以下是一个简单的迭代器示例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17class MyIterator:
def __init__(self, n):
self.n = n
self.current = 0
def __iter__(self):
return self
def __next__(self):
if self.current < self.n:
value = self.current
self.current += 1
return value
else:
raise StopIteration
# 使用迭代器
my_iterator = MyIterator(5)
for value in my_iterator:
print(value)生成器(Generators)
生成器是一种特殊类型的迭代器,它不需要实现
__iter__()和__next__()方法。生成器使用yield关键字来产生值,而不是通过返回一个值来生成值。生成器在每次产生值后会暂停执行,并在下一次调用时从上次暂停的地方继续执行。
生成器的特点:使用
yield关键字定义,而不是return。生成器是懒惰的,它们只在需要时才计算值。
可以使用
next()函数或for循环来迭代。
以下是一个简单的生成器函数示例:1
2
3
4
5
6def my_generator(n):
for i in range(n):
yield i
# 使用生成器
for value in my_generator(5):
print(value)生成器表达式
生成器表达式是创建生成器的另一种简洁方式,类似于列表推导,但是使用圆括号
()而不是方括号[]。1
2
3gen_exp = (x * x for x in range(5))
for value in gen_exp:
print(value)生成器函数
指的是一个函数,以yeid代替return,返回一个生成器对象。
总结
迭代器:实现了
__iter__()和__next__()方法的对象,可以用于迭代。生成器:一种特殊的迭代器,使用
yield关键字定义,可以更高效地处理数据流。
生成器特别适合于处理大量数据或需要按需生成数据的场景,因为它们不需要在内存中存储整个数据集。迭代器则是一个更通用的概念,适用于任何可以迭代的对象。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 The Site Of Liu!




