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 GAE、Django导出Excel的方法
Nov 24 Python
Php多进程实现代码
May 07 Python
Python 删除连续出现的指定字符的实例
Jun 29 Python
详解一种用django_cache实现分布式锁的方式
Sep 01 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
Dec 11 Python
Pyorch之numpy与torch之间相互转换方式
Dec 31 Python
Matplotlib scatter绘制散点图的方法实现
Jan 02 Python
TensorFlow 显存使用机制详解
Feb 03 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
Feb 18 Python
关于Keras Dense层整理
May 21 Python
Python 实现定积分与二重定积分的操作
May 26 Python
使用numpy实现矩阵的翻转(flip)与旋转
Jun 03 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 伪静态隐藏传递参数名的四种方法
2010/02/22 PHP
关于php正则匹配汉字的方法介绍
2013/04/25 PHP
Thinkphp中的volist标签用法简介
2014/06/18 PHP
thinkphp模板赋值与替换实例简述
2014/11/24 PHP
php字符串操作针对负值的判断分析
2016/07/28 PHP
PHP进程通信基础之信号
2017/02/19 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
2019/11/04 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
javascript完美拖拽的实现方法
2013/09/29 Javascript
用js的for循环获取radio选中的值
2013/10/21 Javascript
jQuery判断checkbox是否选中的小例子
2013/12/02 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
详解JavaScript编程中的数组结构
2015/10/24 Javascript
js判断当前页面在移动设备还是在PC端中打开
2016/01/06 Javascript
vue中 v-for循环的用法详解
2020/02/19 Javascript
如何用JS模拟实现数组的map方法
2020/07/30 Javascript
JS面向对象实现飞机大战
2020/08/26 Javascript
JS中箭头函数与this的写法和理解
2021/01/14 Javascript
[32:39]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第一场 11.04
2020/11/04 DOTA
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
Python Numpy库安装与基本操作示例
2019/01/08 Python
Python Excel处理库openpyxl使用详解
2019/05/09 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
2019/09/07 Python
python pillow库的基础使用教程
2021/01/13 Python
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
新品发布会主持词
2014/04/02 职场文书
大学活动总结模板
2014/07/10 职场文书
元旦标语大全
2014/10/09 职场文书
2014年机关作风建设工作总结
2014/10/23 职场文书
工作失误检讨书范文
2015/01/26 职场文书
预备党员入党感想
2015/08/10 职场文书
2016参观监狱警示教育活动心得体会
2016/01/15 职场文书
应用最多的公文《通知》如何写?
2019/04/02 职场文书
Ajax实现异步加载数据
2021/11/17 Javascript
图片批量处理 - 尺寸、格式、水印等
2022/03/07 杂记