在Python中,这种一边循环一边计算的机制,称为生成器
为什么要有生成器
列表所有数据都在内存中,如果有海量数据的话将会非常耗内存。
如:仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
如果列表元素按照某种算法推算出来,那我们就可以在循环的过程中不断推算出后续的元素,这样就不必创建完整的list,从而节省大量的空间。
简单一句话:我又想要得到庞大的数据,又想让它占用空间少,那就用生成器!
生成器是一个特殊的程序,可以被用作控制循环的迭代行为,python中生成器是迭代器的一种,使用yield返回值函数,每次调用yield会暂停,而可以使用next()函数和send()函数恢复生成器。
生成器类似于返回值为数组的一个函数,这个函数可以接受参数,可以被调用,但是,不同于一般的函数会一次性返回包括了所有数值的数组,生成器一次只能产生一个值,这样消耗的内存数量将大大减小,而且允许调用函数可以很快的处理前几个返回值
创建生成器的方法:第一种方法很简单,只有把一个列表生成式的[]中括号改为()小括号,
#列表生成式
lis
=
[x
*
x
for
x
in
range
(
10
)]
print
(lis)
#生成器
generator_ex
=
(x
*
x
for
x
in
range
(
10
))
print
(generator_ex)
结果:
[
0
,
1
,
4
,
9
,
16
,
25
,
36
,
49
,
64
,
81
]
方法二, 如果一个函数中包含yield
关键字,那么这个函数就不再是一个普通函数,而是一个generator。调用函数就是创建了一个生成器(generator)对象。