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中数据解析
May 05 Python
python实现ping的方法
Jul 06 Python
Python 文件处理注意事项总结
Apr 10 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
Jul 17 Python
使用Python实现简单的服务器功能
Aug 25 Python
Python实现对百度云的文件上传(实例讲解)
Oct 21 Python
Python实现列表删除重复元素的三种常用方法分析
Nov 24 Python
使用50行Python代码从零开始实现一个AI平衡小游戏
Nov 21 Python
python:按行读入,排序然后输出的方法
Jul 20 Python
利用python 读写csv文件
Sep 10 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
Dec 21 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
Apr 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
python插入排序算法的实现代码
Nov 21 #Python
You might like
php 过滤危险html代码
2009/06/29 PHP
php用户注册时常用的检验函数实例总结
2014/12/22 PHP
既简单又安全的PHP验证码 附调用方法
2016/06/02 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
Centos7 Yum安装PHP7.2流程教程详解
2019/07/02 PHP
菜单效果
2006/10/14 Javascript
Jquery选择子控件&quot;大于号&quot;和&quot; &quot;区别介绍及使用示例
2013/06/25 Javascript
JS滚轮事件onmousewheel使用介绍
2013/11/01 Javascript
在JavaScript中使用开平方根的sqrt()方法
2015/06/15 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
详解jQuery的表单验证插件--Validation
2016/12/21 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
详解如何在vue中使用sass
2017/06/21 Javascript
JavaScript定时器setTimeout()和setInterval()详解
2017/08/18 Javascript
浅析vue.js数组的变异方法
2018/06/30 Javascript
简单了解JavaScript sort方法
2019/11/25 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
Python多进程并发(multiprocessing)用法实例详解
2015/06/02 Python
Python 的类、继承和多态详解
2017/07/16 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
2018/10/26 Python
详解Python是如何实现issubclass的
2019/07/24 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
2019/11/11 Python
Numpy与Pytorch 矩阵操作方式
2019/12/27 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
2020/09/01 Python
使用CSS3的ruby-position固定注音位置的用法示例
2016/07/05 HTML / CSS
《燕子》教学反思
2014/02/18 职场文书
2014年后勤管理工作总结
2014/12/01 职场文书
2014年校务公开工作总结
2014/12/18 职场文书
辩论赛主持人开场白
2015/05/29 职场文书
基于flask实现五子棋小游戏
2021/05/25 Python
springboot项目以jar包运行的操作方法
2021/06/30 Java/Android
一小时迅速入门Mybatis之bind与多数据源支持 Java API
2021/09/15 Javascript
Nginx隐藏式跳转(浏览器URL跳转后保持不变)
2022/04/07 Servers