Python中的生成器类似于函数,除了不返回值并退出进程,生成器将暂停进程,保存下一次的状态。从代码角度来看,函数和生成器之间的最大区别是一个词:
return
更改为
yield
。
处理非常大的数据集合时,生成器变得非常有用,您不希望一次性存储在内存中。它对于处理极大甚至无限的系列也非常有用。
下面是如何使用生成器打印偶数的示例。一次打印所有偶数将花费无限的时间,但生成器允许进程暂停,并在需要时返回创建偶数。
要创建下一个连续的偶数,只需调用
next()
生成器对象,它将产生下一次迭代。之后
yield
被调用,一切都在生成功能的状态冻结,并返回值。当再次调用发生器时
next()
,它会
yield
从之前的停止位置向右拾取。
# Definition of the generator to produce even numbers.
def all_even():
n = 0
while True:
yield n
n += 2
my_gen = all_even()
# Generate the first 5 even numbers.
for i in range(5):
print(next(my_gen))
# Now go and do some other processing.
do_something = 4
do_something += 3
print(do_something)
# Now go back to generating more even numbers.
for i in range(100):
print(next(my_gen))
学自:优达学城:数据结构与算法
版权声明:本文为qq_30193419原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。