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中分数的相关使用教程
Mar 30 Python
使用Python的Tornado框架实现一个Web端图书展示页面
Jul 11 Python
Python随机数用法实例详解【基于random模块】
Apr 18 Python
python通过socket实现多个连接并实现ssh功能详解
Nov 08 Python
使用Python来开发微信功能
Jun 13 Python
Python中关键字global和nonlocal的区别详解
Sep 03 Python
python得到windows自启动列表的方法
Oct 14 Python
python库matplotlib绘制坐标图
Oct 18 Python
Django自定义列表 models字段显示方式
Apr 03 Python
python实现扫雷小游戏
Apr 24 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
Jul 14 Python
详解Python遍历列表时删除元素的正确做法
Jan 07 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线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
php常用文件操作函数汇总
2014/11/22 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
PHP里的$_GET数组介绍
2019/03/22 PHP
php屏蔽错误及提示的方法
2020/05/10 PHP
jquery UI 1.72 之datepicker
2009/12/29 Javascript
jquery实现居中弹出层代码
2010/08/25 Javascript
深入理解JavaScript中的传值与传引用
2013/12/09 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
浅谈jQuery绑定事件会叠加的解决方法和心得总结
2016/10/26 Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
2016/12/20 Javascript
Bootstrap媒体对象学习使用
2017/03/07 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
2017/04/07 Javascript
vue.js组件之间传递数据的方法
2017/07/10 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
2018/01/15 Javascript
jQuery实现ajax回调函数带入参数的方法示例
2018/06/26 jQuery
ES7之Async/await的使用详解
2019/03/28 Javascript
[33:23]Secret vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
Python标准库sched模块使用指南
2017/07/06 Python
scrapy爬虫完整实例
2018/01/25 Python
python 对象和json互相转换方法
2018/03/22 Python
解决Matplotlib图表不能在Pycharm中显示的问题
2018/05/24 Python
Python 读写文件的操作代码
2018/09/20 Python
对python中词典的values值的修改或新增KEY详解
2019/01/20 Python
如何使用Python进行OCR识别图片中的文字
2019/04/01 Python
centos7之Python3.74安装教程
2019/08/15 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
Python3使用Selenium获取session和token方法详解
2021/02/16 Python
鼠标滚轮事件和Mac触控板双指事件
2019/12/23 HTML / CSS
为什么需要版本控制
2016/10/28 面试题
法人授权委托书格式
2014/04/08 职场文书
雏鹰争章活动总结
2014/05/09 职场文书
建筑安全员岗位职责
2015/02/15 职场文书
2015年员工工作总结范文
2015/04/08 职场文书