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实现下载网易云音乐的高清MV
Mar 16 Python
在Django的URLconf中使用多个视图前缀的方法
Jul 18 Python
wxpython中Textctrl回车事件无效的解决方法
Jul 21 Python
python中文件变化监控示例(watchdog)
Oct 16 Python
Python 对输入的数字进行排序的方法
Jun 23 Python
Python产生Gnuplot绘图数据的方法
Nov 09 Python
python xpath获取页面注释的方法
Jan 14 Python
Python安装依赖(包)模块方法详解
Feb 14 Python
计算Python Numpy向量之间的欧氏距离实例
May 22 Python
Spring @Enable模块驱动原理及使用实例
Jun 23 Python
python实现高效的遗传算法
Apr 07 Python
python基于tkinter制作m3u8视频下载工具
Apr 24 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中for循环语句的几种变型
2007/03/16 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
基于php权限分配的实现代码
2013/04/28 PHP
php文件服务实现虚拟挂载其他目录示例
2014/04/17 PHP
php计算函数执行时间的方法
2015/03/20 PHP
php返回当前日期或者指定日期是周几
2015/05/21 PHP
高质量PHP代码的50个实用技巧必备(上)
2016/01/22 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
2016/03/14 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
jquery多浏览器捕捉回车事件代码
2010/06/22 Javascript
JQuery处理json与ajax返回JSON实例代码
2014/01/03 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
Jquery注册事件实现方法
2015/05/18 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
2015/08/21 Javascript
jquery对复选框(checkbox)的操作汇总
2016/01/13 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
2017/07/27 Javascript
vue全局组件与局部组件使用方法详解
2018/03/29 Javascript
vue3.0 CLI - 3.2 路由的初级使用教程
2018/09/20 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
2019/06/26 Javascript
vue el-upload上传文件的示例代码
2020/12/21 Vue.js
[50:58]2018DOTA2亚洲邀请赛3月29日 小组赛A组OpTic VS Newbee
2018/03/30 DOTA
python中requests小技巧
2017/05/10 Python
python 3利用BeautifulSoup抓取div标签的方法示例
2017/05/28 Python
python中关于for循环的碎碎念
2017/06/30 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
Python collections模块使用方法详解
2019/08/28 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
浅析Python 条件控制语句
2020/07/15 Python
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
迪拜航空官方网站:flydubai
2017/04/20 全球购物
澳大利亚领先的亚麻品牌:Bed Threads
2019/12/16 全球购物
运动会广播稿20字
2014/02/18 职场文书
淘宝客服专员岗位职责
2014/04/11 职场文书
医师定期考核实施方案
2014/05/07 职场文书