美文网首页
列表生成式,迭代器,生成器

列表生成式,迭代器,生成器

作者: 潼潼夏 | 来源:发表于2020-03-21 00:22 被阅读0次

    列表生成式

    a = [i+1 for i in range(10)]
    print (a)
    #a=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    

    生成器

    生成器不需要创建整个列表,节省内存;
    generator保存的是算法,每次调用next(generator),就计算出generator的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。
    也可以通过for函数访问

    a = (i+1 for i in range(10))
    print (a)
    #<generator object <genexpr> at 0x117116050>
    print (next(a))
    #1
    for g in a:
        print (g)
    #1
    #2
    #3
    ...
    #10
    

    应用:斐波那契数列

    def fib(max):
        n,a,b=0,0,1
        while n<max:
            yield b
            a,b=b,b+a
            n += 1
    print (fib(6))
    for i in (fib(6)):
        print (i)
    

    这就是定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:
    函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

    相关文章

      网友评论

          本文标题:列表生成式,迭代器,生成器

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