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实现随机密码字典生成器示例
Apr 09 Python
python实现字符串和日期相互转换的方法
May 13 Python
Python简单实现安全开关文件的两种方式
Sep 19 Python
Python使用Scrapy保存控制台信息到文本解析
Dec 27 Python
python+matplotlib实现礼盒柱状图实例代码
Jan 16 Python
Python实现简单生成验证码功能【基于random模块】
Feb 10 Python
python实现百度语音识别api
Apr 10 Python
mac安装pytorch及系统的numpy更新方法
Jul 26 Python
python 执行终端/控制台命令的例子
Jul 12 Python
2020版Python学习路线图(附学习资料)
Sep 15 Python
Python中常用的os操作汇总
Nov 05 Python
详解Python中list[::-1]的几种用法
Nov 16 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横向重复区域显示二法
2008/09/25 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
2012/10/04 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
javascript 获取表单file全路径
2009/12/31 Javascript
基于Jquery+Ajax+Json的高效分页实现代码
2011/10/29 Javascript
jquery 实现密码框的显示与隐藏示例代码
2013/09/18 Javascript
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
Jjcarousellite 实现图片列表滚动的简单实例
2013/11/29 Javascript
js限制文本框只能输入中文的方法
2015/08/11 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
javascript DIV实现跟随鼠标移动
2020/03/19 Javascript
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
BootStrap Table复选框默认选中功能的实现代码(从数据库获取到对应的状态进行判断是否为选中状态)
2017/07/11 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
详解vue通过NGINX部署在子目录或者二级目录实践
2018/09/03 Javascript
详解Vue项目中实现锚点定位
2019/04/24 Javascript
Element实现表格分页数据选择+全选所有完善批量操作
2019/06/07 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
2020/12/04 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
2021/02/15 Javascript
python实现定制交互式命令行的方法
2014/07/03 Python
python编程实现归并排序
2017/04/14 Python
pandas删除行删除列增加行增加列的实现
2019/07/06 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
2019/08/30 Python
对python中assert、isinstance的用法详解
2019/11/27 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
python实现将range()函数生成的数字存储在一个列表中
2020/04/02 Python
基于Python的Jenkins的二次开发操作
2020/05/12 Python
详解python对象之间的交互
2020/09/29 Python
学术会议邀请函范文
2014/01/22 职场文书
单位证明范文
2015/06/18 职场文书
师范生小学见习总结
2015/06/23 职场文书
大学生创业计划书
2019/06/24 职场文书
WIN10使用IIS部署ftp服务器详细教程
2022/08/05 Servers