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中使用copy模块实现列表(list)拷贝
Apr 14 Python
九步学会Python装饰器
May 09 Python
python中argparse模块用法实例详解
Jun 03 Python
Python3.6简单操作Mysql数据库
Sep 12 Python
Python简单计算给定某一年的某一天是星期几示例
Jun 27 Python
Python实现性能自动化测试竟然如此简单
Jul 30 Python
python进程间通信Queue工作过程详解
Nov 01 Python
python匿名函数lambda原理及实例解析
Feb 07 Python
Python logging模块写入中文出现乱码
May 21 Python
Python 数据的累加与统计的示例代码
Aug 03 Python
Python模拟登录和登录跳转的参考示例
Oct 30 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 一个页面执行时间类代码
2010/03/05 PHP
PHP中foreach循环中使用引用要注意的地方
2011/01/02 PHP
php教程 插件机制在PHP中实现方案
2012/11/02 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
2013/12/25 PHP
Smarty模板学习笔记之Smarty简介
2014/05/20 PHP
PHP实现的AES双向加密解密功能示例【128位】
2018/09/03 PHP
Thinkphp5框架实现获取数据库数据到视图的方法
2019/08/14 PHP
在浏览器窗口上添加遮罩层的方法
2012/11/12 Javascript
jquery获取html元素的绝对位置和相对位置的方法
2014/06/20 Javascript
告诉你什么是javascript的回调函数
2014/09/04 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
2016/05/28 Javascript
Angular Module声明和获取重载实例代码
2016/09/14 Javascript
JS遍历对象属性的方法示例
2017/01/10 Javascript
浅析vue-router jquery和params传参(接收参数)$router $route的区别
2018/08/03 jQuery
解决Angular4项目部署到服务器上刷新404的问题
2018/08/31 Javascript
原生js实现each方法实例代码详解
2019/05/27 Javascript
小程序分页实践之编写可复用分页组件
2019/07/18 Javascript
Python运行的17个时新手常见错误小结
2012/08/07 Python
在Django框架中运行Python应用全攻略
2015/07/17 Python
Python json 错误xx is not JSON serializable解决办法
2017/03/15 Python
apache部署python程序出现503错误的解决方法
2017/07/24 Python
Python实现的简单模板引擎功能示例
2017/09/02 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
python 循环读取txt文档 并转换成csv的方法
2018/10/26 Python
python3使用matplotlib绘制条形图
2020/03/25 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
Python使用贪婪算法解决问题
2019/10/22 Python
PyCharm下载和安装详细步骤
2019/12/17 Python
pycharm快捷键汇总
2020/02/14 Python
浅谈CSS3动画的回调处理
2016/07/21 HTML / CSS
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
飞利浦比利时官方网站:Philips比利时
2016/08/24 全球购物
WiFi云数码相框:Nixplay
2018/07/05 全球购物
医学专业大学生求职信
2014/07/12 职场文书
银行资信证明
2015/06/17 职场文书
3050和2060哪个好 性能差多少 差距有多大 谁更有性价比
2022/06/17 数码科技