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 ip正则式
May 07 Python
对python中执行DOS命令的3种方法总结
May 12 Python
使用sklearn之LabelEncoder将Label标准化的方法
Jul 11 Python
python实现Flappy Bird源码
Dec 24 Python
Python日期时间Time模块实例详解
Apr 15 Python
python获取点击的坐标画图形的方法
Jul 09 Python
python实现删除列表中某个元素的3种方法
Jan 15 Python
Django静态资源部署404问题解决方案
May 11 Python
Python unittest基本使用方法代码实例
Jun 29 Python
pyqt5 textEdit、lineEdit操作的示例代码
Aug 12 Python
python基础学习之递归函数知识总结
May 26 Python
Python 如何将integer转化为罗马数(3999以内)
Jun 05 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实现浏览器点击下载TXT文档的方法详解
2013/06/02 PHP
php实现memcache缓存示例讲解
2013/12/04 PHP
php字符串操作针对负值的判断分析
2016/07/28 PHP
浅谈PHP面向对象之访问者模式+组合模式
2017/05/22 PHP
微信接口生成带参数的二维码
2017/07/31 PHP
Yii框架引入coreseek分页功能示例
2019/02/08 PHP
jquery png 透明解决方案(推荐)
2010/08/21 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
jquery获取及设置outerhtml的方法
2015/03/09 Javascript
Jquery 分页插件之Jquery Pagination
2015/08/25 Javascript
微信小程序网络请求的封装与填坑之路
2017/04/01 Javascript
Ionic + Angular.js实现图片轮播的方法示例
2017/05/21 Javascript
详解Vue.js基于$.ajax获取数据并与组件的data绑定
2017/05/26 Javascript
Express+Nodejs 下的登录拦截实现代码
2017/07/01 NodeJs
浅谈在node.js进入文件目录的问题
2018/05/13 Javascript
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
2018/07/27 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
2018/10/09 Javascript
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
TensorFlow实现创建分类器
2018/02/06 Python
python自动化报告的输出用例详解
2018/05/30 Python
Python进阶之全面解读高级特性之切片
2019/02/19 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
Python高阶函数与装饰器函数的深入讲解
2020/11/10 Python
CSS3 Media Queries详细介绍和使用实例
2014/05/08 HTML / CSS
详解HTML5将footer置于页面最底部的方法(CSS+JS)
2018/10/11 HTML / CSS
阿迪达斯法国官方网站:adidas法国
2018/03/20 全球购物
复古服装:RetroStage
2019/05/10 全球购物
Ever New美国:澳大利亚领先的女装时尚品牌
2019/11/28 全球购物
师范生实习个人的自我评价
2013/09/28 职场文书
地质灾害防治方案
2014/05/14 职场文书
打架检讨书范文
2015/01/27 职场文书
西游降魔篇观后感
2015/06/15 职场文书
远程教育培训心得体会
2016/01/09 职场文书
2019新学期家长会工作计划
2019/08/21 职场文书
python中对列表的删除和添加方法详解
2022/02/24 Python