python生成器的使用方法


Posted in Python onNovember 21, 2013

什么是生成器?

生成器是一个包含了特殊关键字yield的函数。当被调用的时候,生成器函数返回一个生成器。可以使用send,throw,close方法让生成器和外界交互。

生成器也是迭代器,但是它不仅仅是迭代器,拥有next方法并且行为和迭代器完全相同。所以生成器也可以用于python的循环中,

生成器如何使用?

首先看一个例子:

#!/usr/bin/python
# -*- coding: utf-8 -*-
def flatten(nested):
    for sublist in nested:
        for element in sublist:
            yield element
nested = [[1,2],[3,4],[5,6]]
for num in flatten(nested):
    print num,

结果为1,2,3,4,5,6

递归生成器:

#!/usr/bin/python
# -*- coding: utf-8 -*-
def flatten(nested):
    try:
        for sublist in nested:
            for element in flatten(sublist):
                yield  element
    except TypeError:
        yield nested
for num in flatten([[1,2,3],2,4,[5,[6],7]]):
    print num

结果为:1 2 3 2 4 5 6 7

让我们一起来看看生成器的本质

首先看下:

#!/usr/bin/python
# -*- coding: utf-8 -*-
def simple_generator():
    yield 1
print simple_generator
def repeater(value):
    while True:
        new  = (yield value)
        if new is not None: value = new

r = repeater(42)
print r.next()
print r.send('hello,world!')

结果为:

<function simple_generator at 0x10c76f6e0>
42
hello,world!

可以看出:
1)生成器就是一函数
2)生成器具有next方法
3)生成器可以使用send 方法和外界交互。

Python 相关文章推荐
简单的通用表达式求10乘阶示例
Mar 03 Python
Python中在脚本中引用其他文件函数的实现方法
Jun 23 Python
python 利用栈和队列模拟递归的过程
May 29 Python
python gensim使用word2vec词向量处理中文语料的方法
Jul 05 Python
python读取raw binary图片并提取统计信息的实例
Jan 09 Python
ansible动态Inventory主机清单配置遇到的坑
Jan 19 Python
Python xpath表达式如何实现数据处理
Jun 13 Python
python+selenium爬取微博热搜存入Mysql的实现方法
Jan 27 Python
基于tensorflow权重文件的解读
May 26 Python
python实现A*寻路算法
Jun 13 Python
基于Python和openCV实现图像的全景拼接详细步骤
Oct 05 Python
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
Jun 21 Python
python单链表实现代码实例
Nov 21 #Python
python双向链表实现实例代码
Nov 21 #Python
python二叉树遍历的实现方法
Nov 21 #Python
python二叉树的实现实例
Nov 21 #Python
python冒泡排序算法的实现代码
Nov 21 #Python
python选择排序算法的实现代码
Nov 21 #Python
python插入排序算法的实现代码
Nov 21 #Python
You might like
通过ODBC连接的SQL SERVER实例
2006/10/09 PHP
php MessagePack介绍
2013/10/06 PHP
WordPress分页伪静态加html后缀
2016/06/08 PHP
php版微信公众平台入门教程之开发者认证的方法
2016/09/26 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
JQuery UI的拖拽功能实现方法小结
2012/03/14 Javascript
js点击列表文字对应该行显示背景颜色的实现代码
2015/08/05 Javascript
js编写当天简单日历效果【实现代码】
2016/05/03 Javascript
AngularJS 过滤器的简单实例
2016/07/27 Javascript
详解vue-cil和webpack中本地静态图片的路径问题解决方案
2017/09/27 Javascript
JavaScript中Require调用js的实例分享
2017/10/27 Javascript
Vue.directive 自定义指令的问题小结
2018/03/04 Javascript
AngularJS监听ng-repeat渲染完成的方法
2018/03/20 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
2018/11/27 Javascript
vue下载excel的实现代码后台用post方法
2019/05/10 Javascript
express框架下使用session的方法
2019/07/31 Javascript
ES6基础之字符串和函数的拓展详解
2019/08/22 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
JavaScript arguments.callee作用及替换方案详解
2020/09/02 Javascript
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
简单了解python模块概念
2018/01/11 Python
解决pycharm 远程调试 上传 helpers 卡住的问题
2019/06/27 Python
django 中使用DateTime常用的时间查询方式
2019/12/03 Python
详解opencv中画圆circle函数和椭圆ellipse函数
2019/12/27 Python
Python插件机制实现详解
2020/05/04 Python
Python修改DBF文件指定列
2020/12/19 Python
.net面试题
2015/12/22 面试题
几个Linux面试题笔试题
2016/08/01 面试题
机械化及自动化毕业生的自我评价分享
2013/11/06 职场文书
写给女朋友的检讨书
2014/01/28 职场文书
元旦促销方案
2014/03/15 职场文书
交通事故协议书范文
2014/04/16 职场文书
2015年感恩节演讲稿(优选篇)
2015/03/20 职场文书
十大好看的穿越动漫排名:《瑞克和莫蒂》第一,国漫《有药》在榜
2022/03/18 日漫