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交换变量
Sep 06 Python
python实现每次处理一个字符的三种方法
Oct 09 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
Jun 13 Python
Python PyQt5实现的简易计算器功能示例
Aug 23 Python
安装python3的时候就是输入python3死活没有反应的解决方法
Jan 24 Python
python3解析库pyquery的深入讲解
Jun 26 Python
对numpy中的transpose和swapaxes函数详解
Aug 02 Python
Django models.py应用实现过程详解
Jul 29 Python
Python检查图片是否损坏及图片类型是否正确过程详解
Sep 30 Python
如何基于Python制作有道翻译小工具
Dec 16 Python
python numpy生成等差数列、等比数列的实例
Feb 25 Python
python数字图像处理之图像自动阈值分割示例
Jun 28 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
颠覆常识!无色透明的咖啡诞生了(中日双语)
2021/03/03 咖啡文化
Zend Framework校验器Zend_Validate用法详解
2016/12/09 PHP
如何在标题栏显示框架内页面的标题
2007/02/03 Javascript
javascript CSS画图之基础篇
2009/07/29 Javascript
jquery中获得$.ajax()事件返回的值并添加事件的方法
2010/04/15 Javascript
JavaScript格式化数字的函数代码
2010/11/30 Javascript
jquery实现控制表格行高亮实例
2013/06/05 Javascript
jQuery extend()详解及简单实例
2017/05/06 jQuery
JS+jQuery实现注册信息的验证功能
2017/09/26 jQuery
vue axios同步请求解决方案
2017/09/29 Javascript
详解使用PM2管理nodejs进程
2017/10/24 NodeJs
使用ajax的post同步执行(实现方法)
2017/12/21 Javascript
Vue项目全局配置微信分享思路详解
2018/05/04 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
2018/10/09 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
小程序外卖订单界面的示例代码
2019/12/30 Javascript
基于wxpython开发的简单gui计算器实例
2015/05/30 Python
Mac中升级Python2.7到Python3.5步骤详解
2017/04/27 Python
Python数据结构之单链表详解
2017/09/12 Python
python使用udp实现聊天器功能
2018/12/10 Python
Python实现删除排序数组中重复项的两种方法示例
2019/01/31 Python
python中的数据结构比较
2019/05/13 Python
pytorch中图像的数据格式实例
2020/02/11 Python
python实点云分割k-means(sklearn)详解
2020/05/28 Python
keras slice layer 层实现方式
2020/06/11 Python
Win10下用Anaconda安装TensorFlow(图文教程)
2020/06/18 Python
使用CSS3代码绘制可爱的Hello Kitty猫
2016/08/03 HTML / CSS
用CSS禁用输入法(CSS3 UI规范)实例解析
2012/12/04 HTML / CSS
css3 中的新特性加强记忆详解
2016/04/16 HTML / CSS
英国时尚高尔夫服装购物网站:Trendy Golf
2020/01/10 全球购物
Android面试题附答案
2014/12/08 面试题
数字化校园建设方案
2014/05/03 职场文书
天猫活动策划方案
2014/08/21 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
干部作风建设工作总结
2014/10/29 职场文书
预备党员转正材料
2014/12/19 职场文书