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正则匹配查询港澳通行证办理进度示例分享
Dec 27 Python
Python使用defaultdict读取文件各列的方法
May 11 Python
Python退火算法在高次方程的应用
Jul 26 Python
Python 合并多个TXT文件并统计词频的实现
Aug 23 Python
python多线程实现TCP服务端
Sep 03 Python
python实现将json多行数据传入到mysql中使用
Dec 31 Python
python实现ip地址的包含关系判断
Feb 07 Python
Python获取二维数组的行列数的2种方法
Feb 11 Python
基于python爬取有道翻译过程图解
Mar 31 Python
Python中socket网络通信是干嘛的
May 27 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
Jun 23 Python
python创建字典及相关管理操作
Apr 13 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
解析linux下安装memcacheq(mcq)全过程笔记
2013/06/27 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
js的隐含参数(arguments,callee,caller)使用方法
2014/01/28 Javascript
jquery让返回的内容显示在特定div里(代码少而精悍)
2014/06/23 Javascript
javascript函数特点实例分析
2015/05/14 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
2015/10/15 Javascript
Prototype框架详解
2015/11/25 Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
2016/03/05 Javascript
js select实现省市区联动选择
2020/04/17 Javascript
hovertree插件实现二级树形菜单(简单实用)
2016/12/28 Javascript
详解vue 数据传递的方法
2018/04/19 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
2018/11/30 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
2020/08/03 Javascript
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
使用PyInstaller将Python程序文件转换为可执行程序文件
2016/07/08 Python
python使用arcpy.mapping模块批量出图
2017/03/06 Python
新手如何快速入门Python(菜鸟必看篇)
2017/06/10 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
Python使用修饰器执行函数的参数检查功能示例
2017/09/26 Python
Python中单例模式总结
2018/02/20 Python
彻底理解Python中的yield关键字
2019/04/01 Python
Python3实现从排序数组中删除重复项算法分析
2019/04/03 Python
详谈tensorflow gfile文件的用法
2020/02/05 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
Pycharm如何自动生成头文件注释
2020/11/14 Python
利用python+request通过接口实现人员通行记录上传功能
2021/01/13 Python
英语专业个人求职信范文
2014/02/01 职场文书
《囚绿记》教学反思
2014/03/01 职场文书
感恩老师的演讲稿
2014/05/06 职场文书
2014年客房部工作总结
2014/11/22 职场文书
通知的写法
2015/04/23 职场文书
天河观后感
2015/06/11 职场文书
pandas:get_dummies()与pd.factorize()的用法及区别说明
2021/05/21 Python
详解Python为什么不用设计模式
2021/06/24 Python