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除法运算小技巧
Apr 05 Python
Python中文竖排显示的方法
Jul 28 Python
初步认识Python中的列表与位运算符
Oct 12 Python
Python中模块string.py详解
Mar 12 Python
利用Python实现在同一网络中的本地文件共享方法
Jun 04 Python
python利用7z批量解压rar的实现
Aug 07 Python
python list转置和前后反转的例子
Aug 26 Python
Python使用docx模块实现刷题功能代码
Feb 13 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
Mar 16 Python
django Model层常用验证器及自定义验证器详解
Jul 15 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
Nov 28 Python
pytorch 使用半精度模型部署的操作
May 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 数据库树的遍历方法
2009/02/06 PHP
两个php日期控制类实例
2014/12/09 PHP
php使用sql server验证连接数据库的方法
2014/12/25 PHP
ThinkPHP3.2.3数据库设置新特性
2015/03/05 PHP
WordPress中给媒体文件添加分类和标签的PHP功能实现
2015/12/31 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
扩展String功能方法
2006/09/22 Javascript
用Javascript实现Sleep暂停功能代码
2010/09/03 Javascript
javascript学习笔记(三)显示当时时间的代码
2011/04/08 Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
2013/02/26 Javascript
判断JS对象是否拥有某种属性的两种方式
2013/12/02 Javascript
嵌入式iframe子页面与父页面js通信的方法
2015/01/20 Javascript
浅谈jquery点击label触发2次的问题
2016/06/12 Javascript
AngularJS入门教程之ng-checked 指令详解
2016/08/01 Javascript
JavaScript自定义文本框光标
2017/03/05 Javascript
微信小程序的生命周期的详解
2017/10/19 Javascript
Vue2.0 实现移动端图片上传功能
2018/05/30 Javascript
微信小程序实现弹出层效果
2020/05/26 Javascript
微信小程序canvas分享海报功能
2019/10/31 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
JS的时间格式化和时间戳转换函数示例详解
2020/07/27 Javascript
[56:14]Fnatic vs OG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python实现的防DDoS脚本
2011/02/08 Python
pygame学习笔记(6):完成一个简单的游戏
2015/04/15 Python
Python的Django框架下管理站点的基本方法
2015/07/17 Python
Python 生成 -1~1 之间的随机数矩阵方法
2018/08/04 Python
如何在python开发工具PyCharm中搭建QtPy环境(教程详解)
2020/02/04 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
python实现mask矩阵示例(根据列表所给元素)
2020/07/30 Python
python实现excel公式格式化的示例代码
2020/12/23 Python
时装界的“朋克之母”:Vivienne Westwood
2017/07/06 全球购物
买卖正宗运动鞋:GOAT
2019/12/06 全球购物
电子工程专业毕业生求职信
2014/03/14 职场文书
工程项目合作意向书
2015/05/08 职场文书
最新农村养殖致富:资金投入较低的创业项目有哪些?
2019/09/26 职场文书
为什么你写的height:100%不起作用
2021/05/10 HTML / CSS