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读写Excel文件的实例
Nov 01 Python
简单介绍Python中的len()函数的使用
Apr 07 Python
Python+django实现文件上传
Jan 17 Python
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
Nov 24 Python
Django认证系统实现的web页面实现代码
Aug 12 Python
django中使用事务及接入支付宝支付功能
Sep 15 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
Feb 25 Python
Python定时器线程池原理详解
Feb 26 Python
pandas中ix的使用详细讲解
Mar 09 Python
python爬虫中的url下载器用法详解
Nov 30 Python
PyQt 如何创建自定义QWidget
Mar 24 Python
利用Python判断整数是否是回文数的3种方法总结
Jul 07 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 使用pcntl和libevent 实现Timer功能
2013/10/27 PHP
php中strtotime函数用法详解
2014/11/15 PHP
前端必学之PHP语法基础
2016/01/01 PHP
PHP mysql事务问题实例分析
2016/01/18 PHP
PHP注释语法规范与命名规范详解篇
2018/01/21 PHP
tp5.1 实现setInc字段自动加1
2019/10/18 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
关于PHP求解三数之和问题详析
2020/11/09 PHP
myEvent.js javascript跨浏览器事件框架
2011/10/24 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
javascript操作excel生成报表示例
2014/05/08 Javascript
基于Angularjs实现分页功能
2016/05/30 Javascript
jQuery控制div实现随滚动条滚动效果
2016/06/07 Javascript
js实现非常棒的弹出div
2016/10/06 Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
2016/11/09 Javascript
Javascript 高性能之递归,迭代,查表法详解及实例
2017/01/08 Javascript
ES6中javascript实现函数绑定及类的事件绑定功能详解
2017/11/08 Javascript
浅析从vue源码看观察者模式
2018/01/29 Javascript
使用JavaScrip模拟实现仿京东搜索框功能
2019/10/16 Javascript
JavaScript 实现下雪特效的示例代码
2020/09/09 Javascript
vue项目查看vue版本及cli版本的实现方式
2020/10/24 Javascript
详解Typescript里的This的使用方法
2021/01/08 Javascript
Python二叉树的定义及常用遍历算法分析
2017/11/24 Python
用python处理图片实现图像中的像素访问
2018/05/04 Python
Python中return self的用法详解
2018/07/27 Python
python pandas模块基础学习详解
2019/07/03 Python
Django静态文件加载失败解决方案
2020/08/26 Python
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
英国玛莎百货美国官网:Marks & Spencer美国
2018/11/06 全球购物
ECCO俄罗斯官网:北欧丹麦鞋履及皮具品牌
2020/06/26 全球购物
服装行业创业计划书范文
2014/02/05 职场文书
《老山界》教学反思
2014/04/08 职场文书
大三学生英语考试作弊检讨书
2015/01/01 职场文书
2015小学师德工作总结
2015/07/21 职场文书
详解CocosCreator消息分发机制
2021/04/16 Javascript