美文网首页
迭代/生成器

迭代/生成器

作者: cctse | 来源:发表于2017-02-04 16:01 被阅读0次

    for in列表一次性加载列表的所有数据到内存,而迭代器通过一次只加载一项数据,有效避免了当加载的列表过大导致内存不足问题

    生成器

    有两种方法提供生成器:生成器函数生成器表达式

    • 生成器函数:常规函数定义,只是用yield而不是return返回结果。yield语句一次返回一个结果,在每个结果蹭挂起函数状态,以便下次从它离开的地方继续执行
    def gensquares(N):
        for i in range(N):
            yield i ** 2
    
    for item in gensquares(5):
        print(item)
        
    # 使用普通函数一次性生成一个列表
    def gensquares(N):
        res = []
        for i in range(N):
            res.append(i*i)
        return res
    
    for item in gensquares(5):
        print(item)
    
    • 生成器表达式:类似列表推导,只不过不是一次性生成一个结果列表
    squares = (x**2 for x in range(5))
    
    for item in squares(5):
        print(item)
    

    显然使用推导式代码更少更易理解

    为了避免定义难理解,可以简单地认为
    迭代器就是一个可迭代对象,可以在for in中迭代出各元素
    生成器的作用差不多就是生成一个可迭代对象

    注意:生成器生成的可迭代对象只能遍历一次

    相关文章

      网友评论

          本文标题:迭代/生成器

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