码迷,mamicode.com
首页 > 编程语言 > 详细

python yield关键词使用总结

时间:2019-10-15 12:58:04      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:生成文件   open   else   write   utf-8   channels   个数   问题:   功能简介   

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)

 

 

 

 

python yield关键词使用总结

标签:生成文件   open   else   write   utf-8   channels   个数   问题:   功能简介   

原文地址:https://www.cnblogs.com/shouke/p/11676978.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!