`

python 生成器 generator

 
阅读更多
生成器(generator)

使用yield,可以让函数生成一个结果序列,而不仅仅是一个值

例如:
def countdown(n):
    print "counting down"
    while n>0:
        yield n  #生成一个n值
        n -=1

>>> c = countdown(5)
>>> c.next()
counting down
5
>>> c.next()
4
>>> c.next()
3


next()调用生成器函数一直运行到下一条yield语句为止,此时next()将返回值传递给yield.而且函数将暂停中止执行。再次调用时next()时,函数将继续执行yield之后的语句。次过程
持续执行到函数返回为止。

通常不会像上面那样手动调用next(), 而是使用for循环,例如:
>>> for i in countdown(5):
...     print i
...    
counting down
5
4
3
2
1




"""
next(), send()的返回值都是yield 后面的参数, send()跟next()的区别是send()是发送一个参数给(yield n)的表达式,作为其返回值给m, 而next()是发送一个None给(yield n)表达式, 这里需要区分的是,一个是调用next(),send()时候的返回值,一个是(yield n)的返回值,两者是不一样的.看输出结果可以区分。

"""
def h(n):
    while n>0:
        m = (yield n)
        print "m is "+str(m)
        n-=1
        print "n is "+str(n)


>>> p= h(5)
>>> p.next()
5
>>> p.next()
m is None
n is 4
4
>>> p.send("test")
m is test
n is 3
3


分享到:
评论

相关推荐

    Python生成器generator原理及用法解析

    Python生成器generator简介 iteration, iterable, iterator 迭代(iteration):在python中迭代通常是通过for…in…来实现的.而且只要是可迭代对象iterable,都能进行迭代. 可迭代对象(iterable):Python中的任意的对象...

    Python生成器generator用法示例

    本文实例分析了Python生成器generator用法。分享给大家供大家参考,具体如下: 生成器generator本质是一个函数,它记住上一次在函数体中的位置,在生成器函数下一次调用,会自动找到该位置,局部变量都保持不变 l =...

    Python Generator

    在描述中提到的是David Beazley所作的关于Python生成器的系统编程演示文稿,他曾在PyCon UK 2008上进行过该主题的讲解。此外,还强调了生成器在系统编程中的实用性,包括文件操作、文件系统、解析、网络编程和多线程...

    python生成器generator用法实例分析

    本文实例讲述了python生成器generator用法。分享给大家供大家参考。具体如下: 使用yield,可以让函数生成一个结果序列,而不仅仅是一个值 例如: def countdown(n): print counting down while n>0: yield n #...

    Python生成器(Generator)详解

    Python生成器,或称Generator,是一种特殊的迭代器,它的特点是其内部使用了`yield`语句,这使得生成器能够记住执行状态,并在下次调用时恢复。生成器的优势在于它们能够在运行时按需生成数据,而不是一次性生成所有...

    浅谈Python生成器generator之next和send的运行流程(详解)

    ### Python生成器generator之next和send的运行流程详解 #### 一、生成器的基本概念 在Python中,生成器是一种特殊的迭代器,它允许暂停和恢复函数的执行状态。生成器通过`yield`关键字实现这一功能,使得函数可以...

    Python库 | generator3-0.0.7-py3-none-any.whl

    总的来说,`generator3-0.0.7-py3-none-any.whl` 是一个专注于生成器功能的Python库,它为开发者提供了扩展Python生成器能力的工具,帮助他们在处理序列数据或进行高效异步编程时更加得心应手。安装和使用这样的库,...

    python 生成器 & 迭代器.pdf

    一类是 generator,包括生成器和带 yield 的 generator function。 我们把这些可以直接作用于 for 循环的对象统称为可迭代对象:Iterable 。 像生成器这样,不但可以作用于 for 循环,还可以被 next() 函数不断...

    generator_sound_frequency_python_generator_

    基于标签"sound frequency python generator",我们可以推断出这个项目的核心是利用Python编程语言来创建一个声音频率生成器。Python因其易读性和丰富的音频处理库(如pydub, wave, audioread等)而常被用于此类任务...

    浅析Python生成器.pdf

    在 Python 中,生成器(generator)是一种特殊的可迭代对象,它可以在循环中动态地计算和生成元素,而不需要事先创建一个完整的列表。这种机制可以大大节省内存空间,提高程序的效率。 什么是生成器? ------------...

    Python异步编程详解【305263】回顾多线程,多进程,生成器概念.zip

    本文将深入探讨Python中的异步编程概念,包括回顾多线程、多进程以及生成器,并结合提供的课件和代码示例进行详细解释。 首先,多线程是并发执行任务的一种方式。在Python中,`threading`模块提供了创建和管理线程...

    generator_sweep_frequency_python_generator_audio_

    然而,这个项目为学习音频处理和Python生成器提供了一个很好的实践案例,同时也展示了如何利用Python的科学计算库来创建复杂的声音效果。对于有兴趣在数字音频领域工作或学习的人来说,这是一个值得研究的项目。

    python生成器和迭代器区别

    在Python编程语言中,生成器(Generator)和迭代器(Iterator)是两种非常重要的概念,它们主要用于处理大量数据或无限序列,以节省内存资源。理解它们的区别和使用方式对于高效编程至关重要。 一、生成器 1.1 ...

    学学Python_48类的成员07 实现生成器

    在Python编程语言中,生成器(Generator)是一种特殊的迭代器,它通过`yield`语句实现,能够让我们在运行时动态地生成序列,而无需一次性将所有数据存储在内存中。这种方式大大节省了内存资源,尤其对于处理大量数据...

Global site tag (gtag.js) - Google Analytics