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打印出菱形、三角形以及矩形的方法实例
Aug 08 Python
Python实现图片转字符画的示例
Aug 22 Python
Python实现调度算法代码详解
Dec 01 Python
Python排序搜索基本算法之堆排序实例详解
Dec 08 Python
Python中装饰器高级用法详解
Dec 25 Python
python数字图像处理之骨架提取与分水岭算法
Apr 27 Python
python3爬虫之设计签名小程序
Jun 19 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
Jul 09 Python
使用Python制作表情包实现换脸功能
Jul 19 Python
最小二乘法及其python实现详解
Feb 24 Python
python 实现围棋游戏(纯tkinter gui)
Nov 13 Python
MATLAB 如何求取离散点的曲率最大值
Apr 16 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
正义联盟的终局之战《天启星战争》将成为DC动画宇宙的最后一部
2020/04/09 欧美动漫
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
2016/10/25 PHP
理解Javascript_02_理解undefined和null
2010/10/11 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
ie下$.getJSON出现问题的解决方法
2014/02/12 Javascript
Jquery Easyui选项卡组件Tab使用详解(10)
2016/12/18 Javascript
vue基于Element构建自定义树的示例代码
2017/09/19 Javascript
vue-router权限控制(简单方式)
2018/10/29 Javascript
小程序Request的另类用法详解
2019/08/09 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
axios实现文件上传并获取进度
2020/03/25 Javascript
vuex实现像调用模板方法一样调用Mutations方法
2019/11/06 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
vue.js的简单自动求和计算实例
2019/11/08 Javascript
[00:14]护身甲盾
2019/03/06 DOTA
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
python创建一个最简单http webserver服务器的方法
2015/05/08 Python
详解Python函数作用域的LEGB顺序
2016/05/14 Python
老生常谈python的私有公有属性(必看篇)
2017/06/09 Python
Python高级用法总结
2018/05/26 Python
解决新django中的path不能使用正则表达式的问题
2018/12/18 Python
python匹配两个短语之间的字符实例
2018/12/25 Python
python设置随机种子实例讲解
2019/09/12 Python
html5记忆翻牌游戏实现思路及代码
2013/07/25 HTML / CSS
HTML5+JS实现俄罗斯方块原理及具体步骤
2013/11/29 HTML / CSS
耐克奥地利官网:Nike奥地利
2019/08/16 全球购物
"引用"与多态的关系
2013/02/01 面试题
实习销售业务员自我鉴定
2013/09/21 职场文书
英文自荐信格式
2013/11/28 职场文书
《鸿门宴》教学反思
2014/04/22 职场文书
法定代表人证明书
2014/11/28 职场文书
事业单位工作人员年度考核个人总结
2015/02/12 职场文书
辞职信格式模板
2015/02/27 职场文书
北大自主招生自荐信
2015/03/04 职场文书
中秋联欢会主持词
2015/07/04 职场文书
Golang实现可重入锁的示例代码
2022/05/25 Golang