什么是生成器?

作者: 罗罗攀 | 来源:发表于2021-09-17 13:58 被阅读0次

    迭代器

    什么是生成器了?生成器就是懒人版迭代器。那迭代器又是什么了?我们会经常写for循环,类似这样的。

    for i in [1, 32, 56]:
        print(i)
    

    这个列表就是一个可以迭代的对象,for语句其实就是把迭代器的过程给隐式化了。其实,可迭代对象使用iter函数就能编程迭代器,通过next函数就可以完成遍历。

    l1 = [1, 2, 3]
    i = iter(l1)
    print(i)
    
    print(next(i))
    print(next(i))
    print(next(i))
    print(next(i))
    
    <list_iterator object at 0x0000020595F65760>
    1
    2
    3
    StopIteration
    

    生成器

    看了上面的迭代器,我们发现,需要迭代数据,这些数据都要事先生成,如果数据量很大,就需要占用大量内存。

    生成器则不同,生成器只有再调用next函数时候,才会生成下一个变量,生成器可以通过()生成,也可以在函数中使用yield关键词,这样函数就是生成器了。

    g = (i for i in range(10000))
    print(g)
    
    <generator object <genexpr> at 0x000001DBD3FEBBA0>
    

    或者是

    def g():
        for i in range(10000):
            yield i
    
    print(g())
    

    yield的理解

    yield和return很类似,但执行到yield时候,立即返回。但是,在下一次进入函数时候,要从yield后面一行代码开始执行。

    def test():
        yield 4
        print('test')
    
    a = test()
    print(next(a))
    print(next(a))
    
    4
    test
    StopIteration
    

    第一次执行next时,在yield返回为4,在执行第二次next时,执行print('test')语句,由于生成器没有元素了,所以报错StopIteration。

    今天的分享就到这了,我们下期再见~

    相关文章

      网友评论

        本文标题:什么是生成器?

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