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解析nginx日志文件
May 11 Python
用TensorFlow实现lasso回归和岭回归算法的示例
May 02 Python
Python3单行定义多个变量或赋值方法
Jul 12 Python
flask框架实现连接sqlite3数据库的方法分析
Jul 16 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
Jan 24 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
Feb 11 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
Jun 04 Python
Python faker生成器生成虚拟数据代码实例
Jul 20 Python
Python类成员继承重写的实现
Sep 16 Python
python 装饰器的基本使用
Jan 13 Python
python 高阶函数简单介绍
Feb 19 Python
Python制作春联的示例代码
Jan 22 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
收音机史话 - 1960年代前后的DIY
2021/03/02 无线电
PHP使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
PHP使用栈解决约瑟夫环问题算法示例
2017/08/27 PHP
Yii框架的redis命令使用方法简单示例
2019/10/15 PHP
javascript针对DOM的应用实例(一)
2012/04/15 Javascript
文本框input聚焦失焦样式实现代码
2012/10/12 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
2013/04/07 Javascript
JavaScript 中的日期和时间及表示标准介绍
2013/08/21 Javascript
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
JS正则表达式验证数字代码
2014/01/28 Javascript
Javascript基础_标记文字的实现方法
2016/06/14 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
javascript实现循环广告条效果
2017/12/12 Javascript
详解使用uni-app开发微信小程序之登录模块
2019/05/09 Javascript
js中arguments对象的深入理解
2019/05/14 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
Vue项目接入Paypal实现示例详解
2020/06/04 Javascript
微信小程序实现上传多张图片、删除图片
2020/07/29 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
Python单例模式实例分析
2015/01/14 Python
python实现泊松图像融合
2018/07/26 Python
使用python将时间转换为指定的格式方法
2018/11/12 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
python实现多进程按序号批量修改文件名的方法示例
2019/12/30 Python
python实现猜单词游戏
2020/05/22 Python
Kmeans均值聚类算法原理以及Python如何实现
2020/09/26 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
2021/01/29 Python
英国男女奢华内衣和泳装购物网站:Figleaves
2017/01/28 全球购物
Spartoo比利时:欧洲时尚购物网站
2017/12/06 全球购物
市场营销调查计划书
2014/05/02 职场文书
2019年度行政文员工作计划范本!
2019/07/04 职场文书
星际争霸:毕姥爷vs解冻03
2022/04/01 星际争霸
ECharts transform数据转换和dataZoom在项目中使用
2022/12/24 Javascript