美文网首页
python yield

python yield

作者: 智勇双全的小六 | 来源:发表于2018-04-11 09:26 被阅读0次

    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)
        
    

    相关文章

      网友评论

          本文标题:python yield

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