加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

从新认知天生器Generator

发布时间:2021-06-03 01:05:55 所属栏目:编程 来源:互联网
导读:我们知道,函数体包括 yield 要害字的函数不是一个平凡函数。这种函数叫做 天生器 ( generator ),一样平常用于轮回处理赏罚布局,应用适合可以极大优化内存行使服从。例

我们知道,函数体包括 yield 要害字的函数不是一个平凡函数。这种函数叫做 天生器 ( generator ),一样平常用于轮回处理赏罚布局,应用适合可以极大优化内存行使服从。譬喻,计一律个函数,打开文件并将每一行转成大写并返回:

def read_file_upper(path): 

    lines = [] 

    with open(path) as f: 

        for line in f: 

            lines.append(line.upper()) 

    return lines 

这个版本的函数,在内部建设了一个 list 工具,用于生涯转换功效。for 轮回则遍历文件每一行,将其转成大写并追加到列表中。这样一来,文件中的每一行均必要生涯在列表中,假如文件很大,内存开销可想而知。

我们可以借助 yield 要害字,将 read_file_upper 函数改成天生器版本。函数主体逻辑没有任何变革,只是将每行数据的处理赏罚功效通过 yield 逐个返回,而不是网络到 list 工具后再返还。

def iter_file_upper(path): 

    with open(path) as f: 

        for line in f: 

            yield line.upper() 

假云云刻有一个文本文件 data.txt ,内里包括以下内容:

hello, world 

life is short, use python 

my wechat id is: coding-fan 

bye 

用 iter_file_upper 天生器,我们可以这样对它举办处理赏罚:

>>> for line in iter_file_upper('text.txt'): 

...     print(line.strip()) 

HELLO, WORLD 

LIFE IS SHORT, USE PYTHON 

MY WECHAT ID IS: CODING-FAN 

BYE 

iter_file_upper 天生器用法与 read_file_upper 函数大抵沟通,但它不会一次性拿住文件全部数据行,而是逐行处理赏罚、逐个返回,这样便将内存行使量降到最低。

从新认知天生器Generator

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读