美文网首页
生成器 (1)

生成器 (1)

作者: 夕阳_好 | 来源:发表于2020-05-06 11:26 被阅读0次

    疑问?通过列表生成式,可以直接创建一个列表。
    所有的数据都会存到内存中,受内存的限制,列表的容量是有限制的,如果列表中有10000个数据,如果我们只需访问前几个元素,后面的基本不会访问,那么造成内存极大的浪费。

    如果列表中的元素可以按照某种算法推导出来,那么我们在循环遍历列表时不断的退到后面的元素,从而节省大量内存。这种一边循环一边推导的机制称为生成器(generator)

    # 创建生成器
    1.讲列表生成式[] 改为 () 即可:
    g = (x*x for x in range(1,3))
    print(type(g))  # <class 'generator'>
    print(g)  # 对象
    # 特点:可以通过next() 函数过得generator的下一个值
    print(next(g))   # 1
    print(next(g))   # 4
    print(next(g))   # 报错StopIteration异常
    
    # 改进,如果数据有10000万个也需要一直写next吗?
    
    for i in g:
      print(i)
    

    使用循环优点:不需要重复写,同时不会报错了
    原理:生成器generator保存的是算法,每次调用next()就计算生成器下一个元素的值,直到抛出StopIteration错误为止。

    相关文章

      网友评论

          本文标题:生成器 (1)

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