生成器(generator)
生成器是一个特殊的程序,可以被用作控制循环的迭代行为,python中生成器是迭代器的一种,使用yield返回值函数,每次调用yield会暂停,而可以使用next()函数和send()函数恢复生成器。
核心含义:控制循环,yield函数,next() send()
lis
=
[x
*
x
for
x
in
range
(
10
)]
(lis)
生成列表
[
0
,
1
,
4
,
9
,
16
,
25
,
36
,
49
,
64
,
81
]
<generator
object
<genexpr> at
0x000002A4CBF9EBA0
>
generator_ex
=
(x
*
x
for
x
in
range
(
10
))
(generator_ex)
生成器
<generator
object
<genexpr> at
0x000002A4CBF9EBA0
>
生成器(generator)保存的是算法,每次调用next(generaotr_ex)就计算出他的下一个元素的值,直到计算出最后一个元素,没有更多的元素时,抛出StopIteration的错误,节省了空间,提高了内存利用率
生成器函数调用顺序
函数是顺序执行的,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次被next()调用时候从上次的返回yield语句处急需执行,也就是用多少,取多少,不占内存。
总结
python有两种关于生成器的方法
生成器函数:也是用def定义的,利用关键字yield一次性返回一个结果,阻塞,重新开始,可迭代的对象都有一个__next__()__成员方法
生成器表达式:返回一个对象,这个对象只有在需要的时候才产生结果,就是上面代码描述的例子