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 过滤字符串的技巧,map与itertools.imap
Sep 06 Python
python实现通过shelve修改对象实例
Sep 26 Python
python开发之基于thread线程搜索本地文件的方法
Nov 11 Python
python安装oracle扩展及数据库连接方法
Feb 21 Python
python django 实现验证码的功能实例代码
May 18 Python
python搭建服务器实现两个Android客户端间收发消息
Apr 12 Python
Python实现的txt文件去重功能示例
Jul 07 Python
实例讲解Python中浮点型的基本内容
Feb 11 Python
python文件和文件夹复制函数
Feb 07 Python
Python爬虫之Selenium下拉框处理的实现
Dec 04 Python
pyqt5蒙版遮罩mask,setmask的使用
Jun 11 Python
Python jiaba库的使用详解
Nov 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
桌面中心(一)创建数据库
2006/10/09 PHP
php+iframe实现隐藏无刷新上传文件
2012/02/10 PHP
php 判断服务器操作系统的类型
2014/02/17 PHP
PHP速成大法
2015/01/30 PHP
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
js innerHTML 的一些问题的解决方法
2008/06/22 Javascript
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
js 自动播放的实例代码
2013/11/19 Javascript
SinaEditor使用方法详解
2013/12/28 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
Windows 系统下安装和部署Egret的开发环境
2014/07/31 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
node.js平台下利用cookie实现记住密码登陆(Express+Ejs+Mysql)
2017/04/26 Javascript
深入理解ES6之数据解构的用法
2018/01/13 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
JS计算斐波拉切代码实例
2019/09/12 Javascript
Angular封装表单控件及思想总结
2019/12/11 Javascript
python 爬取微信文章
2016/01/30 Python
wxpython中自定义事件的实现与使用方法分析
2016/07/21 Python
利用Python脚本生成sitemap.xml的实现方法
2017/01/31 Python
Python多进程multiprocessing用法实例分析
2017/08/18 Python
python序列化与数据持久化实例详解
2019/12/20 Python
查看keras各种网络结构各层的名字方式
2020/06/11 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
化工专业推荐信范文
2013/11/28 职场文书
上班玩游戏检讨书
2014/02/07 职场文书
后备干部考察材料
2014/02/12 职场文书
2014年师德师风学习材料
2014/05/16 职场文书
小学一年级学生评语大全
2014/12/25 职场文书
2015年党建工作目标责任书
2015/05/08 职场文书
办公室规章制度范本
2015/08/04 职场文书
驾驶员管理制度范本
2015/08/06 职场文书
关于职业道德的心得体会
2016/01/18 职场文书
HTML中的表格元素介绍
2022/02/28 HTML / CSS
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang