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实现给qq邮箱发送邮件的方法
May 28 Python
python实现决策树C4.5算法详解(在ID3基础上改进)
May 31 Python
对numpy中布尔型数组的处理方法详解
Apr 17 Python
Python设计模式之享元模式原理与用法实例分析
Jan 11 Python
浅谈python之高阶函数和匿名函数
Mar 21 Python
python爬虫解决验证码的思路及示例
Aug 01 Python
pytorch自定义初始化权重的方法
Aug 17 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
Aug 27 Python
python opencv如何实现图片绘制
Jan 19 Python
解决pip install psycopg2出错问题
Jul 09 Python
利用python汇总统计多张Excel
Sep 22 Python
Opencv 图片的OCR识别的实战示例
Mar 02 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/12/19 PHP
PHP数据库连接mysql与mysqli对比分析
2016/01/04 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
数理公式,也可以这么唯美
2021/03/10 无线电
JQuery写动态树示例代码
2013/07/31 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
用js设置下拉框为只读的小技巧
2014/04/10 Javascript
js实现鼠标悬浮给图片加边框的方法
2015/01/30 Javascript
jQuery里filter()函数与find()函数用法分析
2015/06/24 Javascript
JS实现图片的不间断连续滚动的简单实例
2016/06/03 Javascript
jQuery控制div实现随滚动条滚动效果
2016/06/07 Javascript
老生常谈js动态添加事件--- 事件委托
2016/07/19 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
2017/08/17 jQuery
浅谈ES6 模板字符串的具体使用方法
2017/11/07 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
JavaScript迭代器的含义及用法
2019/06/21 Javascript
js实现贪吃蛇小游戏
2019/10/29 Javascript
[42:34]VP vs VG 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Django Rest framework权限的详细用法
2019/07/25 Python
python的scipy实现插值的示例代码
2019/11/12 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
美国受欢迎的眼影品牌:BH Cosmetics
2016/10/25 全球购物
美体小铺加拿大官方网站:The Body Shop加拿大
2016/10/30 全球购物
日本最大的眼镜购物网站:Oh My Glasses
2016/11/13 全球购物
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
NYX Professional Makeup英国官网:美国平价专业彩妆品牌
2019/11/13 全球购物
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
优秀护士获奖感言
2014/02/20 职场文书
洗车工岗位职责
2014/03/15 职场文书
舞蹈教育学专业求职信
2014/06/29 职场文书
2014年企业党支部工作总结
2014/12/04 职场文书
学生会生活部工作总结2015
2015/03/31 职场文书
小学教师见习总结
2015/06/23 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书