美文网首页
编写高质量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