python生成器
python生成器
什么是生成器?
? 通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
? 所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。
创建生成器
要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]
改成()
,就创建了一个generator:
ls=[i for i in range(10)] lm=(i for i in range(10)) print(type(ls)) print(type(lm)) ________________________________ output: <class 'list'> <class 'generator'>
可以看到,通过这种方法生成的是一个generator ls可以直接打印出来,但是lm需要调用next()方法来获取下一个值。但是一般我们不会采用next()方法来获取生成器的值,而是利用for循环来获得,还可以避免StopIteration的错误。
另外一种创建生成器的方法是利用yield关键字,在函数里出现yield关键字的时候,该函数就会变成一个生成器。
case:
def func(): print('first function') yield print('second function') yield print('third function') yield f=func() next(f) next(f) next(f) _________________________ output: first function second function third function
在执行过程中,我们可以看到,当程序运行到yield
就会中断,下次又继续执行。当函数称为生成器时,我们不会用next()方法来取得值,而是利用for循环 同时for还会捕获StopIteration错误。
相关推荐
YENCSDN 2020-11-17
lsjweiyi 2020-11-17
houmenghu 2020-11-17
Erick 2020-11-17
HeyShHeyou 2020-11-17
以梦为马不负韶华 2020-10-20
lhtzbj 2020-11-17
夜斗不是神 2020-11-17
pythonjw 2020-11-17
dingwun 2020-11-16
lhxxhl 2020-11-16
坚持是一种品质 2020-11-16
染血白衣 2020-11-16
huavhuahua 2020-11-20
meylovezn 2020-11-20
逍遥友 2020-11-20
weiiron 2020-11-16