零基础学python-19.6 生成器函数应用
2015-10-01 23:18
477 查看
这一章节我们来讨论一下生成器函数应用。
先定义一个生成器函数:
从上面的代码可以看见,函数test返回的是一个生成器,然后当生成器产生一个结果之后,控制权就会返回给函数,然后系统会记录函数当前的状态(作用域与变量)
下面,我们来看看执行代码:
从执行的代码可以看见,他每次生成一个结果,就会终止生产,然后把控制权交回给函数,然后等待下一次的调用
由于生成器支持迭代协议,因此我们可以使用内建函数next()或者__next__来读取里面的值,当出现StopIteration异常时,生成器会自动回收。
在之前的章节当中我们提到一些建立列表的例子例如:
除了使用for之外,我们还提到使用列表解析与map来解决这个问题
我们上面的代码都是很快就可以生成结果出来,但是,如果当处理里面的对象需要花费大量的时间,而且不必一次性处理所有对象,这个时候yield这种延迟生成就具备很大的意义了。
总结:这一章节讨论了生成器函数的一些应用,以及主要的应用场景。
这一章节就说到这里,谢谢大家
------------------------------------------------------------------
点击跳转零基础学python-目录
先定义一个生成器函数:
>>> def test(): for x in range(3): yield x >>> test() <generator object test at 0x00BBF378>
从上面的代码可以看见,函数test返回的是一个生成器,然后当生成器产生一个结果之后,控制权就会返回给函数,然后系统会记录函数当前的状态(作用域与变量)
下面,我们来看看执行代码:
>>> def test(): for x in range(3): yield x >>> x=test() >>> next(x) 0 >>> next(x) 1 >>>
从执行的代码可以看见,他每次生成一个结果,就会终止生产,然后把控制权交回给函数,然后等待下一次的调用
由于生成器支持迭代协议,因此我们可以使用内建函数next()或者__next__来读取里面的值,当出现StopIteration异常时,生成器会自动回收。
>>> def test(): for x in range(3): yield x >>> x=test() >>> next(x) 0 >>> next(x) 1 >>>x.__next__
<method-wrapper '__next__' of generator object at 0x01E69260>
>>> x.__next__()
2
>>> x.__next__()
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
x.__next__()
StopIteration
>>>
在之前的章节当中我们提到一些建立列表的例子例如:
>>> def test(N): res=[] for x in range(N): res.append(x**2) return res >>> test(4) [0, 1, 4, 9] >>>
除了使用for之外,我们还提到使用列表解析与map来解决这个问题
>>> [x**2 for x in range(4)] [0, 1, 4, 9] >>> list(map(lambda x : x**2,range(4))) [0, 1, 4, 9] >>>
我们上面的代码都是很快就可以生成结果出来,但是,如果当处理里面的对象需要花费大量的时间,而且不必一次性处理所有对象,这个时候yield这种延迟生成就具备很大的意义了。
总结:这一章节讨论了生成器函数的一些应用,以及主要的应用场景。
这一章节就说到这里,谢谢大家
------------------------------------------------------------------
点击跳转零基础学python-目录
相关文章推荐
- Python贝叶斯算法进行文本主客观分析(采用文本双词模型)
- Python贝叶斯算法进行情感分析
- Python实现文件夹深度优先遍历
- Python利用遗传算法解决八皇后问题
- [Python爬虫] 中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题
- Python3.x和Python2.x的区别
- 《机器学习实战》笔记之十四——利用SVD简化数据
- 【Python之旅】第四篇(一):Python装饰器
- python3.4-小爬虫
- python学习之list
- Python核心编程笔记 - 第13章 面向对象编程(二)
- Python美女[从新手到高手]--阅读"见个面问题 HashMap 储存方法"联想
- Python核心编程笔记 - 第13章 面向对象编程 (一)
- Windows7 平台下Python+NLTK环境搭建
- python 中的 filter, lambda, map, reduce 内置函数
- python的timer带参数传递
- Python连接mysql数据库
- Sublime Text 搭建 Python 开发平台
- 八大排序算法(Python实现)
- virtualenv--python虚拟沙盒的安装使用