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批量修改word文件名的方法示例
Oct 17 Python
python spyder中读取txt为图片的方法
Apr 27 Python
使用Python AIML搭建聊天机器人的方法示例
Jul 09 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
May 06 Python
python实现大文件分割与合并
Jul 22 Python
python+selenium 点击单选框-radio的实现方法
Sep 03 Python
python 伯努利分布详解
Feb 25 Python
解决pyqt5异常退出无提示信息的问题
Apr 08 Python
Python logging模块写入中文出现乱码
May 21 Python
python进度条显示-tqmd模块的实现示例
Aug 23 Python
python3.7.3版本和django2.2.3版本是否可以兼容
Sep 01 Python
Python中读取文件名中的数字的实例详解
Dec 25 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文件上传实例详解!!!
2007/01/02 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
2013/09/30 PHP
php实现根据词频生成tag云的方法
2015/04/17 PHP
PHP与Web页面的交互示例详解一
2020/08/04 PHP
很好用的js日历算法详细代码
2013/03/07 Javascript
实用的Jquery选项卡TAB示例代码
2013/08/28 Javascript
利用毫秒减值计算时长的js代码
2013/09/22 Javascript
Javasipt:操作radio标签详解
2013/12/30 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
2014/01/28 Javascript
特殊情况下如何获取span里面的值
2014/05/20 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
解决vue this.$forceUpdate() 处理页面刷新问题(v-for循环值刷新等)
2018/07/26 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
vue组件开发props验证的实现
2019/02/12 Javascript
vue使用Proxy实现双向绑定的方法示例
2019/03/20 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
Vue程序调试的方法
2019/06/17 Javascript
vue+eslint+vscode配置教程
2019/08/09 Javascript
[01:14:31]Secret vs VG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
详谈python http长连接客户端
2017/06/12 Python
基于循环神经网络(RNN)的古诗生成器
2018/03/26 Python
DES加密解密算法之python实现版(图文并茂)
2018/12/06 Python
对python读写文件去重、RE、set的使用详解
2018/12/11 Python
Django urls.py重构及参数传递详解
2019/07/23 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
python制作抽奖程序代码详解
2021/01/15 Python
python中altair可视化库实例用法
2021/01/26 Python
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
不忘国耻振兴中华演讲稿
2014/05/14 职场文书
退休党员个人对照检查材料思想汇报
2014/09/29 职场文书
国际残疾人日广播稿范文
2014/10/09 职场文书
2015年小学二年级班主任工作总结
2015/05/21 职场文书
学校团代会开幕词
2016/03/04 职场文书
Prometheus 监控MySQL使用grafana展示
2021/08/30 MySQL
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis