2019-05-26派森学习第184天
2019-05-26 本文已影响0人
每日派森
生成器
python中如果生成一个很大的列表,比如有100万个元素,这样会很浪费内存。可以通过生成器一边循环,一边计算接下来是哪个元素,这样就是生成器。
创建生成器有很多方法:
方法1:将列表生成式的[]变成圆括号()就可以啦

我们可以直接打印出list的每一个元素,但我们怎么打印出generator的每一个元素呢?
如果要一个一个打印出来,可以通过next()函数获得generator的下一个返回值:

当然,每次都手动next()太烦了,也可以用for遍历:

所以,我们创建了一个generator后,基本上永远不会调用next(),而是通过for循环来迭代它,并且不需要关心StopIteration的错误。
方法2:含有yield
这就是定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator