python yield

转载 2013年12月04日 10:08:48

一个带有 yield 的函数就是一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。

yield 的好处是显而易见的,把一个函数改写为一个 generator 就获得了迭代能力,比起用类的实例保存状态来计算下一个 next() 的值,不仅代码简洁,而且执行流程异常清晰。


一个例子:

 def fab(max): 
    n, a, b = 0, 0, 1 
    while n < max: 
        yield b 
        # print b 
        a, b = b, a + b 
        n = n + 1 


另一个例子

另一个 yield 的例子来源于文件读取。如果直接对文件对象调用 read() 方法,会导致不可预测的内存占用。好的方法是利用固定长度的缓冲区来不断读取文件内容。通过 yield,我们不再需要编写读文件的迭代类,就可以轻松实现文件读取:

清单 9. 另一个 yield 的例子
 def read_file(fpath): 
    BLOCK_SIZE = 1024 
    with open(fpath, 'rb') as f: 
        while True: 
            block = f.read(BLOCK_SIZE) 
            if block: 
                yield block 
            else: 
                return

相关文章推荐

python 之 yield

yield   用for循环调用可迭代的函数 ____________________________________________________________________ 包...

python---深入理解yield

原文地址: http://www.pythontab.com/html/2015/pythonhexinbiancheng_0415/946.htmlyield的英文单词意思是生产,刚接触Pytho...

python中yield语句详解——译自stack overflow

原题目链接:http://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do-in-python翻译水平一般…请见谅…原...

[转]Python yield 使用浅析

原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/初学 Python 的开发者经常会发现很多 Python 函...

Python中的yield是如何使用的

[注:文中代码在Python3.5中运行通过] yield是Python中的关键字,带有yield的函数被称为生成器(generator)。 先来看一个使用yield的例子: def gen...

Python yield 用法

yield 用法说明 yield 简单说来就是一个生成器,生成器是这样一个函数,它记住上一次返回时在函数体中的位置。对生成器函数的第二次(或第 n 次)调用跳转至该函数中间,而上次调用的...

[Python]yield用法入门

包含yield表达式的函数是特殊的函数,叫做生成器函数(generator function),被调用时将返回一个迭代器(iterator),调用时可以使用next或send(msg)。它的用法与re...

Python yield 使用浅析

您可能听说过,带有 yield 的函数在 Python 中被称之为 generator(生成器),何谓 generator ? 我们先抛开 generator,以一个常见的编程题目来展示 yield ...

python iterator generator yield

个人理解,欢迎指正 1、iterator container.__iter__() Return an iterator object. The object is required to suppo...

关于Python中的yield

在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(constructor)。 一、迭代器(iterator) 在Python中,for循环可以用于Pyth...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)