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 相关文章推荐
Python3处理文件中每个词的方法
May 22 Python
Python编码类型转换方法详解
Jul 01 Python
Python基础练习之用户登录实现代码分享
Nov 08 Python
Python 从相对路径下import的方法
Dec 04 Python
python等差数列求和公式前 100 项的和实例
Feb 25 Python
django从后台返回html代码的实例
Mar 11 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
Apr 22 Python
Python基于wordcloud及jieba实现中国地图词云图
Jun 09 Python
Python 列表中的修改、添加和删除元素的实现
Jun 11 Python
python安装第三方库如xlrd的方法
Oct 31 Python
Python调用系统命令os.system()和os.popen()的实现
Dec 31 Python
Python - 10行代码集2000张美女图
May 23 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 模拟get_headers函数的代码示例
2013/04/27 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
2016/04/02 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
详谈php中 strtr 和 str_replace 的效率问题
2017/05/14 PHP
phpwind放自动注册方法
2006/12/02 Javascript
URL编码转换,escape() encodeURI() encodeURIComponent()
2006/12/27 Javascript
js电信网通双线自动选择技巧
2008/11/18 Javascript
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
2013/07/01 Javascript
JavaScript获取多个数组的交集简单实例
2013/11/11 Javascript
Javascript中封装window.open解决不兼容问题
2014/09/28 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
JavaScript Promise 用法
2016/06/14 Javascript
js获取浏览器的各种属性
2017/04/27 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
小程序云开发如何实现图片上传及发表文字
2019/05/17 Javascript
微信小程序之几种常见的弹框提示信息实现详解
2019/07/11 Javascript
JavaScript 判断浏览器是否是IE
2021/02/19 Javascript
[01:00:49]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第二场 1月31日
2021/03/11 DOTA
python实现简易数码时钟
2021/02/19 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
用vue.js组件模拟v-model指令实例方法
2019/07/05 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
pytorch:torch.mm()和torch.matmul()的使用
2019/12/27 Python
python同义词替换的实现(jieba分词)
2020/01/21 Python
python3 deque 双向队列创建与使用方法分析
2020/03/24 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
2020/11/17 Python
python Autopep8实现按PEP8风格自动排版Python代码
2021/03/02 Python
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
公务员个人自我评价分享
2013/11/06 职场文书
学生打架检讨书
2014/10/20 职场文书
2015年五四青年节演讲稿
2015/03/18 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书
2015年学生资助工作总结
2015/05/25 职场文书
Python万能模板案例之matplotlib绘制甘特图
2022/04/13 Python