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 多进程并发操作中进程池Pool的实例
Nov 01 Python
python利用有道翻译实现"语言翻译器"的功能实例
Nov 14 Python
python实现冒泡排序算法的两种方法
Mar 10 Python
python迭代dict的key和value的方法
Jul 06 Python
pycharm debug功能实现跳到循环末尾的方法
Nov 29 Python
对python中的six.moves模块的下载函数urlretrieve详解
Dec 19 Python
使用Python 正则匹配两个特定字符之间的字符方法
Dec 24 Python
python获取服务器响应cookie的实例
Dec 28 Python
windows下python虚拟环境virtualenv安装和使用详解
Jul 16 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
Jan 13 Python
利于python脚本编写可视化nmap和masscan的方法
Dec 29 Python
Python使用DFA算法过滤内容敏感词
Apr 22 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 文件上传代码(限制jpg文件)
2010/01/05 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
2014/06/21 PHP
PHP实现文件下载断点续传详解
2014/10/15 PHP
整理php防注入和XSS攻击通用过滤
2015/09/13 PHP
详解PHP数据压缩、加解密(pack, unpack)
2016/12/17 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
2019/10/09 PHP
JavaScript 常见安全漏洞和自动化检测技术
2015/08/21 Javascript
简单的JS时钟实例讲解
2016/01/13 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
全面了解JavaScript对象进阶
2016/07/19 Javascript
如何用JS判断两个数字的大小
2016/07/21 Javascript
JQ选择器_选择同类元素的第N个子元素的实现方法
2016/09/08 Javascript
jQuery插件FusionCharts绘制的2D双面积图效果示例【附demo源码】
2017/04/11 jQuery
JavaScript编程设计模式之构造器模式实例分析
2017/10/25 Javascript
JS返回页面时自动回滚到历史浏览位置
2018/09/26 Javascript
Angular事件之不同组件间传递数据的方法
2018/11/15 Javascript
详解TypeScript+Vue 插件 vue-class-component的使用总结
2019/02/18 Javascript
keep-alive不能缓存多层级路由菜单问题解决
2020/03/10 Javascript
[50:02]完美世界DOTA2联赛循环赛 Magma vs IO BO2第一场 11.01
2020/11/02 DOTA
Python聊天室实例程序分享
2016/01/05 Python
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
python 实现数字字符串左侧补零的方法
2018/12/04 Python
Python中的asyncio代码详解
2019/06/10 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
2019/07/31 Python
Python 使用多属性来进行排序
2019/09/01 Python
Python Pillow(PIL)库的用法详解
2020/09/19 Python
python 实现IP子网计算
2021/02/18 Python
BrandAlley英国:法国折扣奢侈品网上零售商
2017/07/03 全球购物
size?丹麦官网:英国伦敦的球鞋精品店
2019/04/15 全球购物
Linux中如何用命令创建目录
2016/12/02 面试题
新年团拜会主持词
2014/04/02 职场文书
八年级英语教学计划
2015/01/23 职场文书
Python中的套接字编程是什么?
2021/06/21 Python
Python3使用Qt5来实现简易的五子棋小游戏
2022/05/02 Python
python数字图像处理:图像的绘制
2022/06/28 Python