Python 爬阶梯 | yield 是什么魔鬼?Python生成器又是个啥?

我们在上一篇中知道了如何通过列表的生成方式可以一行代码就生成一个列表,这篇继续讲列表(容器)相关的。

首先我们来看下这两个列表的区别:

可以看到, list_1 是 [i for i in range(20)] ,而 list_2 是 (i for i in range(20)),主要区别就是一个是 [] , 一个是 (),而后者就是生成器。

可以看到,当我们去执行 list_2 的时候,输出结果是一个 generator(生成器)对象。

我们可以通过 next() 去调用这个生成器里面的元素:

我想到这里你会有点疑惑,就是它们之间有什么区别?

我们这样,来计算一下以下这两个列表生成所需要的时间:

list_1 = [i for i in range(66666666)]

list_2 = (i for i in range(66666666))

我们分别把它们放到方法里面执行,然后用装饰器的方式对它们各自的方法执行时间做个记录:

执行结果如下:

你会发现,方法二,也就是生成器生成的列表 list_2 所消耗的时间远低于 list_1。这是因为

本文隐藏内容 登陆 后才可以浏览
另外,yield 后面可以跟常用的数据类型,比如 string,int,dict:

这样通过 yield 得到生成器,当我们需要用到数据的时候,直接在里面取出来就可以了。

ok,以上就是生成器和 yield 的用法,你以后还会经常看到它的身影。

One Reply to “Python 爬阶梯 | yield 是什么魔鬼?Python生成器又是个啥?”

回复 baililuoyun 取消回复