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编写简单网络爬虫抓取视频下载资源
Nov 04 Python
linecache模块加载和缓存文件内容详解
Jan 11 Python
Python扩展内置类型详解
Mar 26 Python
Python实现合并两个列表的方法分析
May 28 Python
Python生成器的使用方法和示例代码
Mar 04 Python
PIL对上传到Django的图片进行处理并保存的实例
Aug 07 Python
python+Django+pycharm+mysql 搭建首个web项目详解
Nov 29 Python
python飞机大战 pygame游戏创建快速入门详解
Dec 17 Python
python基于opencv检测程序运行效率
Dec 28 Python
使用python脚本自动生成K8S-YAML的方法示例
Jul 12 Python
jupyter notebook 写代码自动补全的实现
Nov 02 Python
基于Python模拟浏览器发送http请求
Nov 06 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』PHP截断函数mb_substr()使用介绍
2013/04/22 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
2016/11/30 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
php使用环形链表解决约瑟夫问题完整示例
2018/08/07 PHP
Laravel框架控制器的middleware中间件用法分析
2019/09/30 PHP
DOM相关内容速查手册
2007/02/07 Javascript
用javascript getComputedStyle获取和设置style的原理
2008/10/10 Javascript
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
jquery获取div距离窗口和父级dv的距离示例
2013/10/10 Javascript
jQuery中:not选择器用法实例
2014/12/30 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
jQuery实现伪分页的方法分享
2016/02/17 Javascript
jQuery用户头像裁剪插件cropbox.js使用详解
2017/06/07 jQuery
Vue-router路由判断页面未登录跳转到登录页面的实例
2017/10/26 Javascript
Angular2进阶之如何避免Dom误区
2018/04/02 Javascript
Vue插件之滑动验证码
2019/09/21 Javascript
js实现固定区域内的不重叠随机圆
2019/10/24 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
python学习笔记之调用eval函数出现invalid syntax错误问题
2015/10/18 Python
python操作字典类型的常用方法(推荐)
2016/05/16 Python
python 实现selenium断言和验证的方法
2019/02/13 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
2019/05/21 Python
flask应用部署到服务器的方法
2019/07/12 Python
python3.x提取中文的正则表达式示例代码
2019/07/23 Python
Python实现遗传算法(二进制编码)求函数最优值方式
2020/02/11 Python
pyspark对Mysql数据库进行读写的实现
2020/12/30 Python
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
校本教研活动总结
2014/07/01 职场文书
2014年社区重阳节活动策划方案
2014/09/16 职场文书
2014年教师业务工作总结
2014/12/19 职场文书
道歉的话语大全
2015/05/12 职场文书
业务员管理制度范本
2015/08/06 职场文书
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL
Java 数组的使用
2022/05/11 Java/Android