python yield

yield

如果不使用 yield,一般会这么写.
然后使用 这个列表的时候,还需要再迭代一遍。
这样效率又低,又占用了内存。

def find_even():
    for i in range(10):
        if i % 2 == 0:
            yield i


def find_even2():
        result = []
    for i in range(10):
        if i % 2 == 0:
            result.append(i)
    return result


if __name__ == '__main__':
    for i in find_even2():
        print(i)

另外,yield 一个很神奇的地方是,生成器执行的时候,遇到 yield 会挂起像 return 一样返回值(这点是和 return 类似的地方),但是当再次执行的执行的时候会接着当时挂起的地方,继续往下执行。(这点是和 return 不同的地方)

如果真的理解了,可以想想下面这个 print 会执行几次,然后 debug 看一下。

def search2(lines, pattern, history=5):
    history_lines = deque(maxlen=history)
    for line in lines:
        if pattern in line:
            yield line, history_lines
        history_lines.append(line)
        print(f"只是挂起,还是会执行的 {line}")


if __name__ == '__main__':
    with open(r"E:\package\package\request_rds\note\test_history.py") as f:
        for i in search2(f, "a"):
            print(i)
    
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 从例 1.1 可以看到,func和gen都是函数, 但前者返回数字 1,后者返回的是个生成器(generator)...
    樊海鹏阅读 306评论 0 0
  • 对 Python 中的 Yield 一直理解的不够深刻,甚至存在误解。遇到一个神奇的用法后(多个 yield 连续...
    宇智波鼬Zero阅读 11,011评论 6 1
  • yield的英文单词意思是生产,刚接触Python的时候感到非常困惑,一直没弄明白yield的用法。一直到稀里糊涂...
    世外大帝阅读 32,850评论 6 22
  • 当函数中包含yield时,函数被调用后并没有执行,可以通过next()语句让它执行,直到遇到yield表达式处。如...
    sum3mer阅读 378评论 0 0
  • 从大暑到立秋,广州依然一如既往的热 烈日当空,热浪滚滚,即便什么都不做,全身毛孔依然不停的渗汗 想起前段时间,暴日...
    金隽菲阅读 471评论 1 1

友情链接更多精彩内容