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的Django框架中URLconf相关的一些技巧整理
Jul 18 Python
Python使用openpyxl读写excel文件的方法
Jun 30 Python
Python探索之静态方法和类方法的区别详解
Oct 27 Python
sublime python3 输入换行不结束的方法
Apr 19 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
Jul 20 Python
Tesserocr库的正确安装方式
Oct 19 Python
Python编程中flask的简介与简单使用
Dec 28 Python
python pandas利用fillna方法实现部分自动填充功能
Mar 16 Python
在python里使用await关键字来等另外一个协程的实例
May 04 Python
windows10在visual studio2019下配置使用openCV4.3.0
Jul 14 Python
如何用python免费看美剧
Aug 11 Python
python 中的@运算符使用
May 26 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导出excel格式数据问题
2014/03/11 PHP
ThinkPHP中Session用法详解
2014/11/29 PHP
在Mac OS上搭建PHP的Yii框架及相关测试环境
2016/02/14 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
2017/07/03 PHP
PHP基于phpqrcode类生成二维码的方法详解
2018/03/14 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
2013/06/25 Javascript
jQuery插件制作之全局函数用法实例
2015/06/01 Javascript
JavaScript+html5 canvas绘制的小人效果
2016/01/27 Javascript
canvas+gif.js打造自己的数字雨头像的示例代码
2017/10/26 Javascript
Vuex 进阶之模块化组织详解
2018/01/12 Javascript
深入理解requireJS-实现一个简单的模块加载器
2018/01/15 Javascript
JS实现容器模块左右拖动效果
2020/01/14 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
Python设计模式之代理模式实例
2014/04/26 Python
Python计算三维矢量幅度的方法
2015/06/15 Python
python抓取网页中图片并保存到本地
2015/12/01 Python
使用Python搭建虚拟环境的配置方法
2018/02/28 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
Python字典中的键映射多个值的方法(列表或者集合)
2018/10/17 Python
python获取array中指定元素的示例
2019/11/26 Python
jupyter notebook实现显示行号
2020/04/13 Python
python requests.get带header
2020/05/05 Python
Python列表如何更新值
2020/05/27 Python
中国最大隐形眼镜网上商城:视客眼镜网
2016/10/30 全球购物
阿迪达斯芬兰官方网站:adidas芬兰
2017/01/30 全球购物
美国唇部护理专家:Sara Happ
2019/06/19 全球购物
英国领先的电动可调床制造商:Laybrook
2019/12/26 全球购物
请写出char *p与"零值"比较的if语句
2014/09/24 面试题
群众路线查摆问题整改措施思想汇报
2014/10/10 职场文书
地方课程教学计划
2015/01/19 职场文书
大卫科波菲尔读书笔记
2015/06/30 职场文书
大学生安全教育主题班会
2015/08/12 职场文书
关于的python五子棋的算法
2022/05/02 Python
在SQL Server中使用 Try Catch 处理异常的示例详解
2022/07/15 SQL Server