python yield关键词使用总结

python yield关键词使用总结

by:授客 QQ1033553122

测试环境

win10

python 3.5

yield功能简介

 

简单来说,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator

代码演示

例子1: 输出斐波那契數列前 N 个数

 

#!/usr/bin/env python

# -*- coding:utf-8 -*-

 

__author__ = 'shouke'

 

 

def fab(max):

    n, a, b = 0, 0, 1

    result = []

    while n < max:

        result.append(b)

        a, b = b, a + b

        n = n + 1

    return result

 

for n in fab(5):

    print(n)

 
以上代码虽然可以满足需求,但是存在的问题:该函数在运行中占用的内存会随着参数 max 的增大而增大,如果要控制内存占用,最好不要用 List
 
改进 使用yield

 

def fab(max):

    n, a, b = 0, 0, 1

    while n < max:

        yield b      # 使用 yield

        a, b = b, a + b

        n = n + 1

 

 

for n in fab(5):

    print(n)

 

例子2:读二进制方式取文件并生成文件副本

#!/usr/bin/env python

# -*- coding:utf-8 -*-

 

__author__ = 'shouke'

 

 

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

with open('D:\Downloads\\channels-2.1.7-copy.tar.gz', 'wb') as f:

    for data in read_file('D:\Downloads\\channels-2.1.7.tar.gz'):

        f.write(data)

 

 

 

 

posted @ 2019-10-15 12:33  授客  阅读(469)  评论(0编辑  收藏  举报