从新认知天生器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 函数大抵沟通,但它不会一次性拿住文件全部数据行,而是逐行处理赏罚、逐个返回,这样便将内存行使量降到最低。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |