Python中的yield和generator

用户15950607784 等级 253 0 0

yeid可以把函数或者列表变成生成器(generator),如果只调用一部分结果,可以极大的缩减内存占用和增加运行速度,可以用next()或者循环得到生成器类型的数据。 generator可以用()表示。

def fab(max):
    n,a,b = 0,0,1
    while n<max:
        yield b
        a,b = b,a+b
        n += 1
if __name__ == '__main__':
    generator = fab(5)
    print(next(generator))
    for n in fab(5):
        print(n)

读取文件时也可以调用,避免一次性读取所有的数据。 下面代码是指定每次读取1024个字节的数据。

  def read_file(fpath):
    BLOCK_SIZE = 1024
    with open(fpath,'rb') as f:
        while True:
            block = f.read(BLOCK_SIZE).decode('utf8')
            if block:
                yield block
            else:
                break

yield和return的区别: 简单理解就是 有yield每次执行时,返回yield后面的内容,然后暂停,再次执行这个含有yield的生成器函数时,会自动立即执行到上次暂停的位置继续执行,而return只会一次性把数据返回

收藏
评论区
守株待兔
最新文章

导读