生成器和一般的函数的最大区别是一个生成器yield一个值,而不是return一个值。yield语句会将函数挂起,并向他的调用者返回一个值,但是保存足够的信息状态为了让其能够在从他挂起的地方恢复。这能够允许这些函数不断产生一系列值,而不是一次产生所有值,之后将值以类似列表的形式返回。
包含了yield语句的函数将被编译为生成器。
尽管上面的例子我们也可以使用for,map或者列表解析的技术实现,但生成器在第一线做了所有工作,当结果列表很大或者处理每一个结果都需要很长时间时,这一点就很有用。