python中Genarator函数用法分析


Posted in Python onApril 08, 2015

本文实例讲述了python中Genarator函数用法。分享给大家供大家参考。具体如下:

Generator函数的定义与普通函数的定义没有什么区别,只是在函数体内使用yield生成数据项即可。Generator函数可以被for循环遍历,而且可以通过next()方法获得yield生成的数据项。

def func(n): 
  for i in range(n):
    yield i 
for i in func(3):
  print i 
r=func(3) 
print r.next() 
print r.next() 
print r.next() 
print r.next()

运行结果如下:

0
1
2
0
1
2
Traceback (most recent call last):
 File "generator.py", line 10, in <module>
  print r.next()
StopIteration

yield保留字与return 语句的返回值和执行原理都不相同。yield生成值并不会中止程序的执行,返回值后程序继续往后执行。return 返回值后,程序将中止执行。

Generator函数一次只返回一个数据项,占用更少的内存。每次生成数据都要记录当前的状态,便于下一次生成数据。

当程序需要较高的性能或一次只需要一个值进行处理时,使用generator函数。当需要获取一次性一组元素的值时,使用序列。

函数里只要有了yield,这个函数就会被编译成一个generator 函数。generator函数object支持python iterator protocol。 每次调用这个对象的next,generator函数就执行到yield,获取到yield生成的值。如果函数返回,就抛出一个异常。这里有个概念就是generator 函数使用yield生成一个值,而不是返回一个值。生成之后函数还没结束,返回了函数就结束了。

>>> x = gensquares(5)
>>> print x
<generator object at 0x00B72D78>
>>> print x.next()
0
>>> print x.next()
1
>>> print x.next()
4
>>> print x.next()
9
>>> print x.next()
16
>>> print x.next()
Traceback (most recent call last):
 File "<stdin>", line 1, in ?
StopIteration
>>>

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python运行的17个时新手常见错误小结
Aug 07 Python
利用Python破解验证码实例详解
Dec 08 Python
详解Python中 sys.argv[]的用法简明解释
Dec 20 Python
Django实现学员管理系统
Feb 26 Python
python绘制评估优化算法性能的测试函数
Jun 25 Python
8种用Python实现线性回归的方法对比详解
Jul 10 Python
python 读取修改pcap包的例子
Jul 23 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
Feb 25 Python
Django认证系统user对象实现过程解析
Mar 02 Python
python实现斗地主分牌洗牌
Jun 22 Python
OpenCV+python实现实时目标检测功能
Jun 24 Python
使用python实现下载我们想听的歌曲,速度超快
Jul 09 Python
探索Python3.4中新引入的asyncio模块
Apr 08 #Python
Windows下用py2exe将Python程序打包成exe程序的教程
Apr 08 #Python
Python bsddb模块操作Berkeley DB数据库介绍
Apr 08 #Python
Python使用scrapy采集数据过程中放回下载过大页面的方法
Apr 08 #Python
在Python中使用M2Crypto模块实现AES加密的教程
Apr 08 #Python
Python使用scrapy采集时伪装成HTTP/1.1的方法
Apr 08 #Python
Python打印scrapy蜘蛛抓取树结构的方法
Apr 08 #Python
You might like
PHP实现文件下载断点续传详解
2014/10/15 PHP
php程序员应具有的7种能力小结
2014/11/27 PHP
Yii框架连接mongodb数据库的代码
2016/07/27 PHP
jquery实现按Enter键触发事件示例
2013/09/10 Javascript
JS画5角星方法介绍
2013/09/17 Javascript
JavaScript?Apple设备检测示例代码
2013/11/15 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
详细总结Javascript中的焦点管理
2016/09/17 Javascript
JS刷新父窗口的几种方式小结(推荐)
2016/11/09 Javascript
JS实现隔行换色的表格排序
2017/03/27 Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
2018/02/04 Javascript
Vue中如何实现proxy代理
2018/04/20 Javascript
详解webpack引入第三方库的方式以及注意事项
2019/01/15 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
node.js如何操作MySQL数据库
2020/10/29 Javascript
python 用opencv调用训练好的模型进行识别的方法
2018/12/07 Python
对python mayavi三维绘图的实现详解
2019/01/08 Python
python 中不同包 类 方法 之间的调用详解
2020/03/09 Python
Python中的wordcloud库安装问题及解决方法
2020/05/27 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
2020/09/09 Python
HTML5之WebGL 3D概述(上)—WebGL原生开发开启网页3D渲染新时代
2013/01/31 HTML / CSS
HTML5实现应用程序缓存(Application Cache)
2020/06/16 HTML / CSS
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
毕业生求职推荐信
2013/11/04 职场文书
新领导上任欢迎词
2014/01/13 职场文书
关于抽烟的检讨书
2014/02/25 职场文书
主题党日活动总结
2014/07/08 职场文书
2014年大学生预备党员思想汇报1000字
2014/09/13 职场文书
2014乡镇班子个人对照检查材料思想汇报
2014/09/26 职场文书
税务会计岗位职责
2015/04/02 职场文书
小学班主任培训心得体会
2016/01/07 职场文书
python opencv旋转图片的使用方法
2021/06/04 Python