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 from

1、yield使用 1)函数中使用yield,可以使函数变成生成器。一个函数如果是生产一个数组,怎么必须把数据存储在内存中,如果使用生成器,则在调用的时候才生成数据,可以节省内存。 2)生成器方法...
  • chenbin520
  • chenbin520
  • 2017年09月27日 12:02
  • 2142

Python中的yield

其实一开始并不想学这个用法。但是随着教材往下看,总是能碰到yield这个东西,导致什么都看不下去。神烦的不行。于是专门拿出来啃一下 http://pyzh.readthedocs.org/en/lat...
  • u012671171
  • u012671171
  • 2014年12月26日 11:57
  • 11854

python中yield与with的配合

最近在看openstack的代码的时候,发现了两个有趣的关键字,with和yield yield的作用是使所在的函数变成一个生成器,可以用next()函数来执行,并在遇到yield后中断,再次调用n...
  • u013213434
  • u013213434
  • 2015年01月09日 13:51
  • 1397

十二、Python的yield用法与原理

翻了一篇workflow上关于yield的用法,翻的有点烂,在这里贻笑大方了,慢慢来,总是期待着一点一点的进步。 为了理解yield的机制,我们需要理解什么是生成器。在此之前先介绍迭代器iter...
  • alvine008
  • alvine008
  • 2015年02月02日 16:21
  • 44210

浅谈Python中的yield表达式

浅谈Python协程中的yield表达式python生成器python中生成器是迭代器的一种,使用yield返回函数值。每次调用yield会暂停,而可以使用next()函数和send()函数可以恢复生...
  • u014683535
  • u014683535
  • 2016年06月25日 11:26
  • 2788

python yield 和 yield from用法总结

#例1. 简单输出斐波那契數列前 N 个数 #缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列 #要提高 fab 函数的可复用性,最好不要直接打印出数列...
  • yishengzhiai005
  • yishengzhiai005
  • 2017年11月08日 17:37
  • 249

Python 中由 yield 实现异步

yield: ①返回一个值、②接收调用者的参数
  • u012730382
  • u012730382
  • 2017年01月06日 10:55
  • 767

python yield和send

包含yield表达式的函数是特殊的函数,叫做生成器函数(generator function),被调用时将返回一个迭代器(iterator),调用时可以使用next或send(msg)。它的用法与re...
  • lantian0802
  • lantian0802
  • 2015年08月10日 12:53
  • 3057

python的关键字yield有什么作用?

要理解yiled还需要理解生成器,而要理解生成器,首先需要理解迭代器。 迭代器: 所有你可以用在for...in...语句中的都是可迭代的:比如lists,strings,files...因为...
  • yubotianxiao
  • yubotianxiao
  • 2016年05月26日 07:33
  • 2268

新手学python(3):yield与序列化

1 Yield生成器        Yield是我在其他语言中没有见过的一个属性,算是python的一大特色,用好之后可以使代码更简洁。考虑一个简单的例子,文件的遍历。要遍历一个目录下的所有文件需要...
  • yutianzuijin
  • yutianzuijin
  • 2014年04月29日 16:57
  • 4647
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python yield
举报原因:
原因补充:

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