美文网首页
编写高质量Python代码的59个有效方法 第16条:考虑用生成

编写高质量Python代码的59个有效方法 第16条:考虑用生成

作者: 淡淡的咸鱼 | 来源:发表于2018-09-19 12:23 被阅读0次

    例:要求查出字符串中每个单词的首字母,在整个字符串里的位置。

    def index_words(text):
        result = []
        if text:
            result.append(0)
        for index, letter in enumerate(text):
            if letter == ' ':
                result.append(index + 1)
        return result
    

    上面这个函数有两个问题:

    1. 每次找到新的结果,都要调用append方法,但我们应该强调的不是append,而是值index+1。于是在函数主体的130个字符里,重要的只有75个左右。
    2. 在返回前,所有结果都存在列表里,如果输入量非常大,程序就可能耗尽内存崩溃

    另一种写法:

    def index_words(text):
        if text:
            yield 0
        for index, letter in enumerate(text):
            if letter == ' ':
                yield index + 1
    
    result = list(index_words(text))
    

    要点:

    • 使用生成器比把收集到的结果放入列表里返回的写法更清晰
    • 无论输入量多大,也不用担心内存耗尽

    相关文章

      网友评论

          本文标题:编写高质量Python代码的59个有效方法 第16条:考虑用生成

          本文链接:https://www.haomeiwen.com/subject/grxinftx.html