【Python】【yield】生成器的使用
2017-10-20 16:48
232 查看
1、通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。
要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的
创建
2、yield 与生成器,包含yield的语句即是一个生成器。这就是定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator。
生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值。
生成器是一个不断产生值的函数。生成器每调用一次在yield位置产生一个值,直到函数执行结束。
函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
3、生成器相比一次列出所有内容的优势:
1)更节省存储空间
2)响应更迅速
3)使用更灵活
4、生成器常常与for 循环搭配使用:
所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。
要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的
[]改成
(),就创建了一个generator:
>>> L = [x * x for x in range(10)] >>> L [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> g = (x * x for x in range(10)) >>> g <generator object <genexpr> at 0x1022ef630>
创建
L和
g的区别仅在于最外层的
[]和
(),
L是一个list,而
g是一个generator
2、yield 与生成器,包含yield的语句即是一个生成器。这就是定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator。
生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值。
生成器是一个不断产生值的函数。生成器每调用一次在yield位置产生一个值,直到函数执行结束。
函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
3、生成器相比一次列出所有内容的优势:
1)更节省存储空间
2)响应更迅速
3)使用更灵活
4、生成器常常与for 循环搭配使用:
for url in urls: yield scrapy.Request(url=url, callback=self.parse)
相关文章推荐
- python yield(生成器)的简单使用
- Python生成器:yield的使用
- Python 3 中生成器函数yield表达式的使用
- Python学习25:生成器使用(yield “type = gennerator”)
- python生成器:使用yield关键字定义迭代器
- Python yield 使用浅析
- 转:Python yield 使用浅析
- Python yield 使用浅析
- Python yield 使用浅析
- Python中如何使用yield,对于庞大迭代的优化处理
- Python yield 使用浅析
- Python生成器 yield
- Python yield 使用浅析
- python yield生成器
- Python yield 使用浅析
- 转:Python yield 使用浅析
- Python yield 使用浅析
- python 从yield 学习迭代器和生成器
- python yield生成器 分类: python基础学习 2013-08-04 15:40 324人阅读 评论(0) 收藏
- Python yield 使用浅析