生成器总结
- 语法上和函数类似:生成器函数几乎和常规函数一样,不同的又两点,
第一点是返回使用yield关键字,第二点是在连续逻辑内可以多次返回
这是yield的特点决定的,yield会记住函数执行的位置,下一次调用next函数时会自动从上次返回的位置开始继续执行,因此生成器是无法倒推的。
#生成器函数实例
def test():
for i in range(10):
yield i*100
g = test()
for i in range(11):
print(g._next_())
- 自动实现迭代协议,上述_next_()函数时自动实现的,不需要手动编写,但
是需要对生成器函数结束时的异常进行处理,当然,for循环等常见python方法中已经处理了 - 优点:延迟计算,并且进行实时计算的数据传输,例如上面的例子,我们不 需要计算所有的乘积之后在统一返回一个数组,而是计算一个值就可以返回一个值
#列表生成的方法,需要保存一个巨大的列表,内存大
sum([i for i in range(1000000)])
#生成器方法,实时传输数据,内存非常小
sum(i for i in range(1000000))