1. 延迟计算:生成器函数返回的是一个迭代器,只在迭代时才会计算并返回新值,而不是一次性全部返回结果。这种方式可以避免占用过多的内存空间。
2. 逐步生成:生成器每次只会生成一部分数据,等到应用程序需要下一部分数据时再生成。这种逐步生成方式可以有效节省内存空间。
3. 迭代器协议:生成器符合迭代器协议,只需实现 __iter__() 和 __next__() 方法,让程序能够执行 __next__() 方法并迭代输出下一个值,同时它还持有代码执行状态,能够记录当前执行到哪里,因此不需要将所有的数据存在内存中。
4. 可以在需要时停止生成:当使用 for 循环遍历生成器时,可以随时跳出循环而不必再执行后续的代码。这种方式可以避免无效计算和内存浪费。
5. 无需显式地创建列表等辅助数据结构:生成器函数可以按照需要生成值,而不需要提前计算并存储在一个序列中。这种方式可以避免额外占用内存的情况发生。