• 2017.8.2迭代器和生成器


    迭代器部分

    可迭代协议

    可以被迭代,切满足一定发要求,就是内部实现了'_itsr_'的方法。

    迭代器:

    迭代器遵循可迭代协议,并且同时实现了'_iter_'和'_next_'的方法。

    for循环本质:

    for循环就是基于迭代器协议提供了一个统一的可以遍历所有对象的方法,即在遍历之前,先调用对象的__iter__方法将其转换成一个迭代器,然后使用迭代器协议去实现循环访问,这样所有的对象就都可以通过for循环来遍历了

    生成器部分

    python中提供的生成器:

    生成器:由常规函数定义,yield返回,且每执行一次就返回一次结果,并将函数至于挂起状态,以备再次调用!

    生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表

    生成器Generator:

    1.本质是一个迭代器(自带_iter_和_next_方法,不需要再去实现)

    2.惰性计算,需要开发者编写

    列表推导式和生成器表达式

    #老男孩由于峰哥的强势加盟很快走上了上市之路,alex思来想去决定下几个鸡蛋来报答峰哥
    
    egg_list=['鸡蛋%s' %i for i in range(10)] #列表解析
    
    #峰哥瞅着alex下的一筐鸡蛋,捂住了鼻子,说了句:哥,你还是给我只母鸡吧,我自己回家下
    
    laomuji=('鸡蛋%s' %i for i in range(10))#生成器表达式
    print(laomuji)
    print(next(laomuji)) #next本质就是调用__next__
    print(laomuji.__next__())
    print(next(laomuji))

    ==》》
    #列表解析
    sum([i for i in range(100000000)])#内存占用大,机器容易卡死
    #生成器表达式
    sum(i for i in range(100000000))#几乎不占内存
    生成器使用的优点:
    1.节省内存,延迟计算,一次只执行一个结果,因此处理大型数据会有优势
    2.提高代码的可读性
  • 相关阅读:
    hdu 2191 珍惜现在,感恩生活(多重背包)
    《从Paxos到ZooKeeper分布式一致性原理与实践》学习知识导图
    你对ArrayList了解多少?
    JAVA酒店管理系统
    C#酒店管理系统
    C#图书管理系统
    java图书管理系统
    豆瓣高分JAVA书籍,你都读过吗?
    JAVA课程设计----------JAVA学生信息管理系统
    C#学生管理系统
  • 原文地址:https://www.cnblogs.com/Leon27-29/p/7274840.html
Copyright © 2020-2023  润新知