在计算机科学中,生成器是特定的迭代器,它完全实现了迭代器接口,所以所有生成器都是迭代器。不过,迭代器用于从数据集中取出元素;而生成器用于"凭空"生成(yield)元素。它不会一次性将所有元素全部生成,而是按需一个一个地生成,所以从头到尾都只需占用一个元素的内存空间。
很典型的一个例子是斐波纳契数列:斐波纳契数列中的数有无穷个,在一个数据结构里放不下,但是可以在需要下一个元素的时候临时计算。
再比如内置函数range()也返回一个类似生成器的对象,每次需要range里的一个数据时才会临时去产生它。如果一定要让range()函数返回列表,必须明确指明list(range(100))。
在Python中生成器是一个函数,但它的行为像是一个迭代器。另外,Python也支持生成器表达式。
>>> def my_generator(chars):
... for i in chars:
... yield i * 2
>>> for i in my_generator("abcdef"):
... print(i, end=" ")
aa bb cc dd ee ff
我是一名python开发工程师,整理了一套python的学习资料,从基础的python脚本到web开发、爬虫、
数据分析、数据可视化、机器学习、面试真题等。想要的可以进群:688244617免费领取