python生成器generator用法实例分析


Posted in Python onJune 04, 2015

本文实例讲述了python生成器generator用法。分享给大家供大家参考。具体如下:

使用yield,可以让函数生成一个结果序列,而不仅仅是一个值

例如:

def countdown(n): 
  print "counting down" 
  while n>0: 
    yield n #生成一个n值 
    n -=1 
>>> c = countdown(5) 
>>> c.next() 
counting down 
5 
>>> c.next() 
4 
>>> c.next() 
3

next()调用生成器函数一直运行到下一条yield语句为止,此时next()将返回值传递给yield.而且函数将暂停中止执行。再次调用时next()时,函数将继续执行yield之后的语句。此过程持续执行到函数返回为止。

通常不会像上面那样手动调用next(), 而是使用for循环,例如:

>>> for i in countdown(5): 
...   print i 
...   
counting down 
5 
4 
3 
2 
1

next(), send()的返回值都是yield 后面的参数, send()跟next()的区别是send()是发送一个参数给(yield n)的表达式,作为其返回值给m, 而next()是发送一个None给(yield n)表达式, 这里需要区分的是,一个是调用next(),send()时候的返回值,一个是(yield n)的返回值,两者是不一样的.看输出结果可以区分。

def h(n): 
  while n>0: 
    m = (yield n) 
    print "m is "+str(m) 
    n-=1 
    print "n is "+str(n) 
>>> p= h(5) 
>>> p.next() 
5 
>>> p.next() 
m is None 
n is 4 
4 
>>> p.send("test") 
m is test 
n is 3 
3

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python 基础教程之Map使用方法
Jan 17 Python
Python基于高斯消元法计算线性方程组示例
Jan 17 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
Aug 07 Python
Python GUI布局尺寸适配方法
Oct 11 Python
python日期相关操作实例小结
Jun 24 Python
通过 Django Pagination 实现简单分页功能
Nov 11 Python
pytorch ImageFolder的覆写实例
Feb 20 Python
基于virtualenv创建python虚拟环境过程图解
Mar 30 Python
解决jupyter notebook 前面书写后面内容消失的问题
Apr 13 Python
python安装sklearn模块的方法详解
Nov 28 Python
Python datetime模块的使用示例
Feb 02 Python
python自动化之如何利用allure生成测试报告
May 02 Python
python函数装饰器用法实例详解
Jun 04 #Python
Python中函数的参数定义和可变参数用法实例分析
Jun 04 #Python
python类装饰器用法实例
Jun 04 #Python
python获得一个月有多少天的方法
Jun 04 #Python
Python中threading模块join函数用法实例分析
Jun 04 #Python
django通过ajax发起请求返回JSON格式数据的方法
Jun 04 #Python
python创建进程fork用法
Jun 04 #Python
You might like
PHP取二进制文件头快速判断文件类型的实现代码
2013/08/05 PHP
Laravel 5框架学习之向视图传送数据
2015/04/08 PHP
PHP实现读取文件夹及批量重命名文件操作示例
2019/04/15 PHP
在线游戏大家来找茬II
2006/09/30 Javascript
ajax 缓存 问题 requestheader
2010/08/01 Javascript
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
javascript针对DOM的应用分析(三)
2012/04/15 Javascript
早该知道的7个JavaScript技巧
2013/03/27 Javascript
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
2015/09/06 Javascript
解析JavaScript面向对象概念中的Object类型与作用域
2016/05/10 Javascript
网络传输协议(http协议)
2016/11/18 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
2016/12/26 Javascript
Bootstrap免费字体和图标网站(值得收藏)
2017/03/16 Javascript
Form表单上传文件(type="file")的使用
2017/08/03 Javascript
原生JS实现ajax与ajax的跨域请求实例
2017/12/01 Javascript
详解node child_process模块学习笔记
2018/01/24 Javascript
浅谈jquery fullpage 插件增加头部和版权的方法
2018/03/20 jQuery
浅析vue-router原理
2018/10/19 Javascript
微信小程序实现下滑到底部自动翻页功能
2020/03/07 Javascript
Vue中key的作用示例代码详解
2020/06/10 Javascript
[04:59]2018DOTA2亚洲邀请赛 4.7 Mineski夺冠时刻
2018/04/09 DOTA
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
2015/04/11 Python
详解Python中的动态属性和特性
2018/04/07 Python
解决python3运行selenium下HTMLTestRunner报错的问题
2018/12/27 Python
Python3实现统计单词表中每个字母出现频率的方法示例
2019/01/28 Python
Python loguru日志库之高效输出控制台日志和日志记录
2020/03/07 Python
Skyscanner英国:苏格兰的全球三大领先航班搜索服务之一
2017/11/09 全球购物
介绍一下linux文件系统分配策略
2012/11/17 面试题
护士演讲稿范文
2014/01/05 职场文书
酒店管理失职检讨书
2014/09/16 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
2014年职称评定工作总结
2014/11/26 职场文书
爱的承诺书
2015/01/20 职场文书
Java 多线程协作作业之信号同步
2022/05/11 Java/Android