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的动态重新封装的教程
Apr 11 Python
总结python实现父类调用两种方法的不同
Jan 15 Python
解决python文件字符串转列表时遇到空行的问题
Jul 09 Python
浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)
Apr 10 Python
pandas DataFrame实现几列数据合并成为新的一列方法
Jun 08 Python
Python简单基础小程序的实例代码
Apr 28 Python
Python之NumPy(axis=0 与axis=1)区分详解
May 27 Python
pytorch多GPU并行运算的实现
Sep 27 Python
Python文件读写w+和r+区别解析
Mar 26 Python
浅谈python多线程和多线程变量共享问题介绍
Apr 17 Python
python多线程爬取西刺代理的示例代码
Jan 30 Python
用python批量解压带密码的压缩包
May 31 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
解决Codeigniter不能上传rar和zip压缩包问题
2014/03/07 PHP
PHP框架Swoole定时器Timer特性分析
2014/08/19 PHP
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
javascript对talbe进行动态添加、删除、验证实现代码
2012/03/29 Javascript
JS控制输入框内字符串长度
2014/05/21 Javascript
IE9+已经不对document.createElement向下兼容的解决方法
2015/09/14 Javascript
jQuery文字横向滚动效果的实现代码
2016/05/31 Javascript
ES6概念 Symbol toString()方法
2016/12/25 Javascript
javascript设计模式之中介者模式学习笔记
2017/02/15 Javascript
让bootstrap的carousel支持滑动滚屏的实现代码
2017/11/27 Javascript
TypeScript之调用栈的实现
2019/12/31 Javascript
在 Django/Flask 开发服务器上使用 HTTPS
2014/07/03 Python
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
Python使用minidom读写xml的方法
2015/06/03 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
2016/07/02 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
Python中的取模运算方法
2018/11/10 Python
pyspark操作MongoDB的方法步骤
2019/01/04 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
Python中itertools的用法详解
2020/02/07 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
2020/02/14 Python
Django Serializer HiddenField隐藏字段实例
2020/03/31 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
css3强大的动画效果animate使用说明及浏览器兼容介绍
2013/01/09 HTML / CSS
css3实现一款模仿iphone样式的注册表单
2013/03/20 HTML / CSS
基于HTML5+tracking.js实现刷脸支付功能
2020/04/16 HTML / CSS
美国领先的个性化礼品商城:Personalization Mall
2019/07/27 全球购物
学生安全教育材料
2014/02/14 职场文书
2014企业领导班子四风对照检查材料思想汇报
2014/09/17 职场文书
教师学期末个人总结
2015/02/13 职场文书
2015年银行员工工作总结
2015/04/24 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
2019大学生社会实践报告汇总
2019/08/16 职场文书
《哪吒之魔童降世》观后感:世上哪有随随便便的成功
2019/11/08 职场文书