生成器类似于返回值为数组的一个函数,这个函数可以接受参数,可以被调用,但是,不同于一般的函数会一次性返回包括了所有数值的数组,生成器一次只能产生一个值,这样消耗的内存数量将大大减小,而且允许调用函数可以很快的处理前几个返回值,因此生成器看起来像是一个函数,但是表现得却像是迭代器。
创建生成器
- 使用类似列表生成器的方法
data——list1 = (x*x for i in range(10)) print(data_list1)我们发现,它返回了一个
<generator object <...> at 0x...>对象。我们试着遍历一下它for i in data_list: print(i)它是可以正常输出的!我们可以用next()来获取它的下一个值。
- 在函数中使用
yielddef test1(): yield 10 a = test1() print(a)它也返回了一个
<generator object <...> at 0x...>对象!a是一个生成器对象我们使用
next(a)就可以得到10了。
在生成器中yield充当return返回值的作用,它能保存生成器运行状态,并暂停执行,当next时,从yield位置继续执行。
可以使用生成器.send()启动生成器并传递参数,参数会传给n = yield ...中的n。
生成器除非不能继续执行,不会自动结束,需要使用return来StopIteration,返回的异常信息就是return的内容。


