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 24 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
Jun 14 Python
django框架如何集成celery进行开发
May 24 Python
Python cookbook(数据结构与算法)从字典中提取子集的方法示例
Mar 22 Python
python查找重复图片并删除(图片去重)
Jul 16 Python
django rest framework vue 实现用户登录详解
Jul 29 Python
python 变量初始化空列表的例子
Nov 28 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
Jan 06 Python
python给视频添加背景音乐并改变音量的具体方法
Jul 19 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
Sep 01 Python
Python 多线程之threading 模块的使用
Apr 14 Python
Django Paginator分页器的使用示例
Jun 23 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中模拟POST传递数据的两种方法分享
2011/09/16 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
2013/09/28 PHP
php实现简单文件下载的方法
2015/01/30 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
基于JQuery的浮动DIV显示提示信息并自动隐藏
2011/02/11 Javascript
基于JQuery的Select选择框的华丽变身
2011/08/23 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
jQuery aminate方法定位到页面具体位置
2013/12/26 Javascript
jquery实现保存已选用户
2014/07/21 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
EasyUI中实现form表单提交的示例分享
2015/03/01 Javascript
浅析Bootstrap组件之面板组件
2016/05/04 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
2017/09/21 Javascript
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
JavaScript中发出HTTP请求最常用的方法
2018/07/12 Javascript
js canvas实现红包照片效果
2018/08/21 Javascript
JS canvas绘制五子棋的棋盘
2020/05/28 Javascript
python抓取网页内容示例分享
2014/02/24 Python
分析python切片原理和方法
2017/12/19 Python
对python使用http、https代理的实例讲解
2018/05/07 Python
解决python报错MemoryError的问题
2018/06/26 Python
python引入不同文件夹下的自定义模块方法
2018/10/27 Python
Pandas读取并修改excel的示例代码
2019/02/17 Python
Python遍历字典方式就实例详解
2019/12/28 Python
Python生成器常见问题及解决方案
2020/03/21 Python
巧用 CSS3的webkit-box-reflect 倒影实现各类动效
2021/03/05 HTML / CSS
美国婴儿和儿童家具网上商店:ABaby.com
2018/07/02 全球购物
请假条标准格式规范
2014/04/10 职场文书
啤酒节策划方案
2014/05/28 职场文书
学校清明节活动总结
2014/07/04 职场文书
2014年平安夜寄语
2014/12/08 职场文书
幼师小班个人总结
2015/02/12 职场文书
工作自我评价范文
2015/03/05 职场文书
2015年社区服务活动总结
2015/03/25 职场文书
创业计划书之个人工作室
2019/08/22 职场文书