生成器是什么

通过列表生成器,我们可以直接创建一个列表,但是由于受到内存限制,列表容量肯定是有限的,而且,创建一个包含100万个元素的列表,不仅占用很大的储存空间,如果我们仅仅需要访问前面几个元素的话,后面元素占用的空间都白白浪费了。

所以,如果列表元素可以按照某种算法推算出来,那么我们是否可以在循环的过程中不断推算出后续的元素?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,叫做生成器:generator,要创建一个generator,有很多种方法,第一种方法很简单,只要把一个列表生成式的[]改为()即可,这样就创建了一个generator,只有在调用的时候,才会形成相应的数据。

列表的生成:

a = [i*2 for i in range(10)]

print(a)

这是列表的生成,print的结果是,0,2,4,6......16,18

生成器:

b = (i*2 for i in range(10))

for i in b:

     print(i)

这就是一个生成器。他等价于下面一串代码:

b = []

for i in range(10)

     b.append(i*2)

print(b)

注意如果:

b = (i*2 for i in range(10))

print(b)

print(type(b))

我们就会发现,第一个print出来的是b这个生成器的内存地址

而第二个会print出来<class 'generator'>

原文地址:https://www.cnblogs.com/zaizaiaipython/p/7820454.html