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 相关文章推荐
python笔记(1) 关于我们应不应该继续学习python
Oct 24 Python
python time模块用法实例详解
Sep 11 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
Nov 16 Python
Python实现的计数排序算法示例
Nov 29 Python
pandas apply 函数 实现多进程的示例讲解
Apr 20 Python
Python hashlib模块用法实例分析
Jun 12 Python
Python Selenium 之数据驱动测试的实现
Aug 01 Python
Python函数装饰器原理与用法详解
Aug 16 Python
如何基于python实现脚本加密
Dec 28 Python
在Pytorch中计算自己模型的FLOPs方式
Dec 30 Python
Django如何实现密码错误报错提醒
Sep 04 Python
python 爬虫之selenium可视化爬虫的实现
Dec 04 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
php处理斐波那契数列非递归方法
2012/02/04 PHP
PHP中的正则表达式函数介绍
2012/02/27 PHP
提升PHP性能的21种方法介绍
2013/06/25 PHP
详解Yii2 之 生成 URL 的方法
2017/06/16 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
jQuery 学习入门篇附实例代码
2010/03/16 Javascript
javascript数组去重方法汇总
2015/04/23 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
2015/05/25 Javascript
用javascript实现自动输出网页文本
2015/07/30 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
2015/09/05 Javascript
JS实现在状态栏显示打字效果完整实例
2015/11/02 Javascript
easyui validatebox验证
2016/04/29 Javascript
JS修改地址栏参数实例代码
2016/06/14 Javascript
vue快捷键与基础指令详解
2017/06/01 Javascript
JS实现的抛物线运动效果示例
2018/01/30 Javascript
vue短信验证性能优化如何写入localstorage中
2018/04/25 Javascript
小程序图片剪裁加旋转的示例代码
2018/07/10 Javascript
VUE v-model表单数据双向绑定完整示例
2019/01/21 Javascript
关于js陀螺仪的理解分析
2019/04/11 Javascript
js+html实现点名系统功能
2019/11/05 Javascript
vue 实现特定条件下绑定事件
2019/11/09 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
python简单图片操作:打开\显示\保存图像方法介绍
2017/11/23 Python
python学习基础之循环import及import过程
2018/04/22 Python
python二维列表一维列表的互相转换实例
2018/07/02 Python
程序员写Python时的5个坏习惯,你有几条?
2018/11/26 Python
python笔记_将循环内容在一行输出的方法
2019/08/08 Python
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
整个世界的设计师家具在哈恩:Designathome
2019/03/25 全球购物
校领导推荐信
2013/11/01 职场文书
优秀少先队大队辅导员事迹材料
2014/05/04 职场文书
银行竞聘演讲稿
2014/05/16 职场文书
2014年个人工作总结模板
2014/12/15 职场文书
学生不参加考试检讨书
2015/02/19 职场文书
Node.js实现断点续传
2021/06/23 Javascript