生成器
1 生成器定义:
在Python中,一边循环一边计算的机制,称为生成器:generator。
2 为什么要有生成器
列表所有数据都在内存中,如果有海量数据的话将会非常耗内存。
如:仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
如果列表元素按照某种算法推算出来,那我们就可以在循环的过程中不断推算出后续的元素,这样就不必创建完整的list,从而节省大量的空间。
简单一句话:我又想要得到庞大的数据,又想让它占用空间少,那就用生成器!
要创建一个generator,有很多种方法。
第一种方法很简单,只要把一个列表生成式的[]改成()
,就创建了一个generator:
l=[i for i in range(4)]
print(l) #[0, 1, 2, 3]
g=(i for i in range(4))
print(g) #<generator object <genexpr> at 0x01D61AB0>
创建L和g的区别仅在于最外层的[]和(),L是一个list,而g是一个generator。
方法二, 如果一个函数中包含yield
关键字,那么这个函数就不再是一个普通函数,而是一个generator。调用函数就是创建了一个生成器(generator)对象。
def gen():
i = 0
while i < 10:
j=yield 'http://page{}'.format(i*10)
if j is not None: