生成器

一、生成器的定义

在函数中使用yield关键字,由函数返回的结果就是生成器。

 1 def gen():
 2     print('gen')
 3     print('gen')
 4     yield 0
 5     print('gen')
 6     yield 1
 7     print('gen')
 8     yield 2
 9 g = gen()
10 print(g)
11 print(next(g))
12 print(g.__next__())

执行结果:

<generator object gen at 0x106ccfcf0>
gen
gen
0
gen
1

从上面的例子可以看出,

一、生成器是迭代器,next(g),g.__next__()取值照样可用。

二、yield关键字的作用可以保留生成器的状态。

三、从第二次迭代开始,每一次迭代会从上一次迭代返回结果的位置开始往下执行代码,遇到yield后返回迭代结果并保留生成器状态再退出。

二、使用生成器有什么好处

用例子来说明一下,

第一种情况:假设需要生成一百万个数据,我们可以通过循环来生成一百万个数据,然后存放于集合中。那么这个集合所占用的内存空间就非常大了。这种情况会一下子让程序崩溃。而且没办法做到获取数据的时效性,等到一百万个数据生成完毕,才可以取出数据。

第二种情况:假设同样生成一百万个数据,我们使用生成器来生成,我们已经明白生成器的定义和使用,生成器在使用的过程中,当需要迭代数据时,生成器就帮我们取出结果数据,每次迭代每次取出一个结果数据存放到变量中,变量使用过后,系统可以自动回收,可以很好地节省内存开支。并且可以做到获取数据的时效性。

在本人看来,使用生成器在程序需要处理或者生成大量数据时,可以极大地节省内存空间,在性能上有所保证,基于这点好处使用生成器才真正发挥它的强大作用。

原文地址:https://www.cnblogs.com/lvqiuji/p/9539290.html