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 相关文章推荐
Fabric 应用案例
Aug 28 Python
python 基础教程之Map使用方法
Jan 17 Python
python爬虫入门教程--优雅的HTTP库requests(二)
May 25 Python
使用Python &amp; Flask 实现RESTful Web API的实例
Sep 19 Python
Python django框架应用中实现获取访问者ip地址示例
May 17 Python
解决Python中回文数和质数的问题
Nov 24 Python
tensorflow使用range_input_producer多线程读取数据实例
Jan 20 Python
pycharm 中mark directory as exclude的用法详解
Feb 14 Python
python实现图片横向和纵向拼接
Mar 05 Python
基于python判断字符串括号是否闭合{}[]()
Sep 21 Python
Python字典取键、值对的方法步骤
Sep 30 Python
七个非常实用的Python工具包总结
Jun 15 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绘制在图片上的正余弦曲线
2013/06/08 PHP
CodeIgniter基于Email类发邮件的方法
2016/03/29 PHP
讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别
2007/04/12 Javascript
通过javascript的匿名函数来分析几段简单有趣的代码
2010/06/29 Javascript
javascript数组的使用
2013/03/28 Javascript
纯js写的分页表格数据为json串
2014/02/18 Javascript
Javascript获取表单名称(name)的方法
2015/04/02 Javascript
解决jquery实现的radio重新选中的问题
2015/07/03 Javascript
IE6兼容透明背景图片及解决方案
2015/08/19 Javascript
JavaScript基于replace+正则实现ES6的字符串模版功能
2017/04/25 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
深度了解vue.js中hooks的相关知识
2019/06/14 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
vue深度监听(监听对象和数组的改变)与立即执行监听实例
2020/09/04 Javascript
python之import机制详解
2014/07/03 Python
python使用sorted函数对列表进行排序的方法
2015/04/04 Python
Python实现的简单文件传输服务器和客户端
2015/04/08 Python
python搜索指定目录的方法
2015/04/29 Python
python获取本机mac地址和ip地址的方法
2015/04/29 Python
Python数据类型详解(一)字符串
2016/05/08 Python
Python+微信接口实现运维报警
2016/08/27 Python
Python3调用微信企业号API发送文本消息代码示例
2017/11/10 Python
对Python 内建函数和保留字详解
2018/10/15 Python
Python中list的交、并、差集获取方法示例
2019/08/01 Python
Python generator生成器和yield表达式详解
2019/08/08 Python
python 视频逐帧保存为图片的完整实例
2019/12/10 Python
如何整合JQuery和Prototype
2014/01/31 面试题
2014年督导工作总结
2014/11/19 职场文书
入党积极分子群众意见
2015/06/01 职场文书
大国崛起观后感
2015/06/02 职场文书
实习指导老师意见
2015/06/04 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书
vue backtop组件的实现完整代码
2021/04/07 Vue.js
一篇文章带你搞懂Python类的相关知识
2021/05/20 Python
python关于集合的知识案例详解
2021/05/30 Python