python生成器的使用方法

 更新时间:2013年11月21日 14:32:24   作者:  
这篇文章主要介绍了什么是生成器,生成器如何使用,下文用例子说明了怎么使用生成器

什么是生成器?

生成器是一个包含了特殊关键字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模块之sys模块和序列化模块(实例讲解)

    python模块之sys模块和序列化模块(实例讲解)

    下面小编就为大家带来一篇python模块之sys模块和序列化模块(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • python单链表实现代码实例

    python单链表实现代码实例

    这篇文章主要介绍了python单链表实现代码,大家参考使用吧
    2013-11-11
  • 应用OpenCV和Python进行SIFT算法的实现详解

    应用OpenCV和Python进行SIFT算法的实现详解

    这篇文章主要介绍了应用OpenCV和Python进行SIFT算法的实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 安装Python后IDA中找不到Python模块的问题解决

    安装Python后IDA中找不到Python模块的问题解决

    有天在一台新PC上安装完IDA和Python之后,启动IDA报找不到Python模块的问题,本文就详细的介绍一下解决方法,感兴趣的可以了解一下
    2021-10-10
  • python 3.8 的anaconda下载方法

    python 3.8 的anaconda下载方法

    本文详细介绍了如何下载和安装带有Python3.8的Anaconda发行版,包括Anaconda简介、下载步骤、安装指南以及验证安装结果,此外,还介绍了如何设置Python3.8作为默认版本并利用别名功能进行快捷切换,帮助读者快速上手使用这一强大的数据科学工具,感兴趣的朋友一起看看吧
    2025-02-02
  • Protocol Buffers(Protobuf)功能及使用方法

    Protocol Buffers(Protobuf)功能及使用方法

    本文介绍了ProtocolBuffers(Protobuf)及其编译器protoc,包括其数据描述语言的特性、编译器的功能、.proto文件的定义、使用方法、支持的编程语言、安装步骤、常用命令选项以及高级功能,感兴趣的朋友跟随小编一起看看吧
    2025-01-01
  • Python脚本激活Linux密码的方法(crypt模块)

    Python脚本激活Linux密码的方法(crypt模块)

    今天小编给大家分享一个非常不错的方法破解linux口令,主要是利用linux系统中的crypt模块模拟了linux系统中用户密码的加密,操作也很方便,对python破解linux口令相关知识感兴趣的朋友跟随小编一起学习下吧
    2021-05-05
  • Python实战整活之聊天机器人

    Python实战整活之聊天机器人

    这篇文章主要介绍了Python实战整活之聊天机器人,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Python图像阈值化处理及算法比对实例解析

    Python图像阈值化处理及算法比对实例解析

    这篇文章主要介绍了Python图像阈值化处理及算法比对实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Python实现校园网自动登录的脚本分享

    Python实现校园网自动登录的脚本分享

    这篇文章主要和大家分享一个Python脚本,leukemia实现校园网自动登录功能。文中的示例代码简洁易懂,快跟随小编一起动手尝试一下吧
    2022-06-06

最新评论