为什么需要生成器
假如现在有一个需求,我要打印从1-1亿的整形。如果我们采用普通的方式,直接调用range函数,那么程序肯定会崩溃,因为range(1,100000000)函数直接产生一个从1-1亿的列表,这个列表中的所有数据都是存放在内存中的,会导致内存爆满。这时候我们可以采用生成器来解决这个问题,生成器不会一次性把所有数据都加载到内存中,而是在循环的时候临时生成的,循环一次生成一个,所以在程序运行期间永远都只会生成一个数据,从而节省内存。
# 普通的列表
ret = [x for x in range(1, 100000000)]
print(type(ret))
# 生成器
ret = (x for x in range(1, 100000000))
print(type(ret))
上面的代码第一种会卡住无法输出,而第二种可以正常遍历1-1亿的数字,使用()
是python规定的语法。
自定义生成器
生成器可以通过函数产生。如果在一个函数中出现了yield表达式,那么这个函数就是一个生成器函