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编写一个简单的Lisp解释器的教程
Apr 03 Python
python关键字and和or用法实例
May 28 Python
python3 读写文件换行符的方法
Apr 09 Python
python批量导入数据进Elasticsearch的实例
May 30 Python
PyCharm设置SSH远程调试的方法
Jul 17 Python
利用arcgis的python读取要素的X,Y方法
Dec 22 Python
浅谈python多进程共享变量Value的使用tips
Jul 16 Python
浅谈Python 敏感词过滤的实现
Aug 15 Python
python构造函数init实例方法解析
Jan 19 Python
解决 jupyter notebook 回车换两行问题
Apr 15 Python
Python 如何操作 SQLite 数据库
Aug 17 Python
Python制作运行进度条的实现效果(代码运行不无聊)
Feb 24 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+MYSQL的文章管理系统(二)
2006/10/09 PHP
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
PHP单链表的实现代码
2016/07/05 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
Fastest way to build an HTML string(拼装html字符串的最快方法)
2011/08/20 Javascript
jquery1.9 下检测浏览器类型和版本的方法
2013/12/26 Javascript
Eclipse去除js(JavaScript)验证错误
2014/02/11 Javascript
js数值和和字符串进行转换时可以对不同进制进行操作
2014/03/05 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
js实现的二级横向菜单条实例
2015/08/22 Javascript
一道常被人轻视的web前端常见面试题(JS)
2016/02/15 Javascript
Bootstrap每天必学之模态框(Modal)插件
2016/04/26 Javascript
微信小程序 scroll-view实现上拉加载与下拉刷新的实例
2017/01/21 Javascript
ES6 Promise对象概念与用法分析
2017/04/01 Javascript
highCharts提示框中显示当前时间的方法
2019/01/18 Javascript
Javascript查看大图功能代码实现
2020/05/07 Javascript
JavaScript动态生成表格的示例
2020/11/02 Javascript
[40:10]2015国际邀请赛全明星表演赛
2015/08/07 DOTA
Python使用urllib2获取网络资源实例讲解
2013/12/02 Python
python+selenium+autoit实现文件上传功能
2017/08/23 Python
Python爬取十篇新闻统计TF-IDF
2018/01/03 Python
python PrettyTable模块的安装与简单应用
2019/01/11 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
Python编程实现tail-n查看日志文件的方法
2019/07/08 Python
Django用户认证系统 User对象解析
2019/08/02 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
pytorch判断是否cuda 判断变量类型方式
2020/06/23 Python
新西兰优惠网站:Treat Me
2019/07/04 全球购物
JDK安装目录下有哪些内容
2014/08/25 面试题
机械工程师的岗位职责
2013/11/17 职场文书
医药类个人求职的自我评价
2014/02/12 职场文书
法律系毕业生自荐信范文
2014/03/27 职场文书
安全先进个人材料
2014/12/29 职场文书
保护环境建议书作文400字
2015/09/14 职场文书
pandas:get_dummies()与pd.factorize()的用法及区别说明
2021/05/21 Python