编写高质量Python代码的59个有效方法 第16条:考虑用生成器改写直接返回列表的函数

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

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简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,803评论 0 10
  • 推荐阅读音乐——张杰、张靓颖《燕归巢》 离家,是一件开始就很难再回头的事。小时候会因为读书的关系而离家住校,大一点...
    蓓以阅读 633评论 8 8
  • 这几天又到了毕业季,看着朋友圈里学弟学妹们晒的毕业照,蓦然回首,原来一年就这样过去了,风轻云淡,平凡中日子如指间流...
    一鸣叫兽阅读 180评论 0 1
  • Markdown 是一种用来写作的轻量级标记语言,它用简洁的语法代替排版,而不像一般我们用的字处理软件Word或P...
    fozero阅读 154评论 0 0
  • 我从你梦中人的瞳孔 看到过你无瑕的眼 你柔顺的眉 却从没看清你完整的脸 我贴着你舒展的肢体 抚摸过你光滑的背 你温...
    昭哥聊聊阅读 403评论 0 2