1、为什么使用生成器

如果有一个需求是要打印1-1亿的整数,如果使用普通的方法即用range(1,100000001),那么程序会崩溃,因为这个range会产生1-1亿的列表放入内存中,导致内存爆满。这时候可以使用生成器来解决,生成器不会一次把所有数据都加载到内存中,而是在循环的时候临时生成,一次生成一个数据,做到节省内存

2、利用圆括号配合range生成一个生成器

3、生成器原理

可以理解为本质上是一个函数,如果这个函数出现了yield表达式,那么这个函数就是生成器,不再是普通函数了,yield只会一次返回一个结果,并且冻结当前函数的状态。

my_gen返回的是一个生成器

通过next()去访问一次生成器,如果超出范围就会抛出StopIteration异常

4、自定义一个生成器

利用生成器写一个range()

从上面的代码可以看出生成器本身就是可迭代对象和迭代器,也就是说它只能迭代一次