首先说明一下,第一次写博客,难免会有纰漏,如果有不足的地方希望大家指正,谢谢
生成器都有什么用处
生成器可以用来存放一些数据,像列表元组那样,在生成器的高端用法里被用作协程(py3.4以前),可以用来实现一些异步操作。
哪些人会用到生成器,在什么场景下来用呢
在你有很多很多数据要存放在一个容器中时,但你并不着急需要用这些数据(也就是说这些数据可能会占用你的大部分内存),那么你很可能需要用到生成器。
或者当你在编写异步IO的项目时,你几乎逃不掉的要学习生成器,还有很多场景下都会用到生成器
那么如何来创建一个简单的生成器呢
很简单,就像一个列表推导式那样
lst = [i for i in range(5)] # 这样就快速创建了一个列表
生成器类似
gen = (i for i in range(5)) # 同样我们创建了一个生成器,这个生成器是一个可迭代对象
print(type(gen)) #
生成器的特性:
生成器可以认为是一个存放数据的集合,而且他是一个一次性的容器
当然这很简单,但是不要简单的认为,这就像快速生成了一个元组,千万不要这么认为,
因为这根本就不是一个元组。
我们将所要保存的数据0,1,2,3,4保存在了这个生成器中
那么当我们需要用到这些数据的时候,我们怎么将它们取出呢?我们不能在像以前的方式
通过下标来取出里边的值,那样是毫无结果的。
上文说过,生成器是一个可迭代对象,那么我们就可以用for..in结构,来一个一个的取出里边的元素,如:
for one in gen: # 遍历这个生成器,并将返回值打印出来
print(one)
0
1
2
3
4
当然这种做法也是很安全的,除此之外还有一种方法next(),
newgen = (i for i in range(2))
print(next(newgen)) # 0 注意需要重新在创建一个新的生成器,
<