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 17 Python
Python之Web框架Django项目搭建全过程
May 02 Python
python snownlp情感分析简易demo(分享)
Jun 04 Python
python 中split 和 strip的实例详解
Jul 12 Python
解决seaborn在pycharm中绘图不出图的问题
May 24 Python
python 不以科学计数法输出的方法
Jul 16 Python
Python简单I/O操作示例
Mar 18 Python
Django urls.py重构及参数传递详解
Jul 23 Python
Python自动化测试笔试面试题精选
Mar 12 Python
详解python UDP 编程
Aug 24 Python
pycharm 如何取消连按两下shift出现的全局搜索
Jan 15 Python
Python 多线程之threading 模块的使用
Apr 14 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中长文章分页显示实现代码
2012/09/29 PHP
php数组中包含中文的排序方法
2014/06/03 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
php file_get_contents取文件中数组元素的方法
2017/04/01 PHP
JavaScript浏览器选项卡效果
2010/08/25 Javascript
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
2010/10/20 Javascript
js 调用本地exe的例子(支持IE内核的浏览器)
2012/12/26 Javascript
基于NodeJS的前后端分离的思考与实践(二)模版探索
2014/09/26 NodeJs
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
2016/05/28 Javascript
微信小程序 视图容器组件的详解及实例代码
2017/01/19 Javascript
分分钟玩转Vue.js组件(二)
2017/03/01 Javascript
详谈ES6中的迭代器(Iterator)和生成器(Generator)
2017/07/31 Javascript
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
一次让你了解全部JavaScript的作用域
2019/06/24 Javascript
原生JS实现天气预报
2020/06/16 Javascript
vue实现移动端拖动排序
2020/08/21 Javascript
python实现获取序列中最小的几个元素
2014/09/25 Python
讲解Python中if语句的嵌套用法
2015/05/14 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
详解Python map函数及Python map()函数的用法
2017/11/16 Python
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
python实现两个经纬度点之间的距离和方位角的方法
2019/07/05 Python
简单了解python的内存管理机制
2019/07/08 Python
Python Django切换MySQL数据库实例详解
2019/07/16 Python
django 数据库连接模块解析及简单长连接改造方法
2019/08/29 Python
css3 条纹化和透明化表格Firefox下测试成功
2014/04/15 HTML / CSS
CSS3实现红包抖动效果
2020/12/23 HTML / CSS
推荐10个HTML5响应式框架
2016/02/25 HTML / CSS
DBA的职责都有哪些
2012/05/16 面试题
什么是Remote Module
2016/06/10 面试题
体育专业求职信
2014/07/16 职场文书
安全保卫工作竞聘材料
2014/08/25 职场文书
区政府领导班子个人对照检查材料
2014/09/25 职场文书
毕业设计致谢词
2015/05/14 职场文书
Centos7 Shell编程之正则表达式、文本处理工具详解
2022/08/05 Servers