Effective Python 读书笔记: 第16条: 考虑用生成器来该写直接返回列表的函数

本文介绍如何使用生成器优化Python代码,特别是在处理大量数据时避免内存溢出的方法。通过将return列表改用yield表达式,实现逐个处理数据元素,提高代码效率。
# -*- encoding: utf-8 -*-

import os

'''
第16条: 考虑用生成器来该写直接返回列表的函数

关键:
1 生成器
含义: 使用yield表达式的函数,返回迭代器
特点: 调用生成器函数时,不会真正运行,而是返回迭代器,
在迭代器调用next函数时,迭代器会把生成器推进到下一个yield表达式

用法: 将需要返回的列表的每一个值用yield返回,用yield取代return
优点: 避免将所有数据存放在列表而带来内存问题,应对任意长度的输入数据
注意点: 返回迭代器有状态,不能反复使用。

2 总结
生成器的主要目的是为了解决输入数据非常大而不能一次装载到内存进行处理的问题,
通过yield该写原来return的代码,将原来直接返回列表修改为逐个返回单个数据。

参考:
Effectiv Python 编写高质量Python代码的59个有效方法


'''
def getIndexOfText(string):
    if string:
        yield 0
    for index, letter in enumerate(string):
        if " " == letter:
            yield (index + 1)


def process():
    string = "Hello world, I like python."
    for index in getIndexOfText(string):
        print index


if __name__ == "__main__":
    process() 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值