• python 迭代器和生成器


    迭代器:

    迭代器:从集合的第一个元素开始访问,到所有的元素都被访问完 ,结束,不能后退,只能往前;
    迭代器的优点:不需要准备所有的元素;只有在迭代时才放入迭代器;元素之前或者之后的元素可以不存在或者时被销毁了,这个特点特别适用于遍历一个巨大的或者无限大的集合,如几个G的文件;
    vi 需要准备好文件(也就是全部读取到内存里面去,当用vi去打开文件,当用cat则不同,他是通过迭代的形式来查看文件的;(从头往后的)
    cat是读一行显示一行;不需要知道中间是什么,可以节省内存,只需关心next的值;
    
    1:无需关心内部结构,仅需通过next()方法获取下一个值
    2:布恩那个随机访问集合中的某一个元素;,只能从头开始访问
    3:访问到一半是不能后退
    4:节省内存,便于循环访问比较大的集合
    
    读文件时不要用:
    for i f.readlines 或者是for i in f.read(); 应该直接用for i in f:
    
    生成器:generator
    如果一个函数调用时返回的事一个迭代器,这个函数叫做生成器;
    yield:
    return 是:
    def cash_out(amount):
        while(amount >0)
        amount -=1
        return 1
        #yield 1
        print ('you are ok')
    
    
    迭代器:
    name1 = ['alex','bluesli','blueslilu']#列表的生成
    name2 = iter(['alex','bluesli','blueslilu'] )#生成一个迭代器对象
    print(name1)
    print(name2.__next__()) #2.7的是直接next而3.x是__next__()
    print(name2.__next__())
    print(name2.__next__())
    生成器:
    
    
    def cash_out(amount):
        while amount >0:
            amount -=100
            # return 1
            yield 100
            print ('又来取钱了')
    
    
    atm= cash_out(500)#这一步没有正正的执行,知识生成了一个迭代器;
    print(type(atm))
    print(atm.__next__())
    print(atm.__next__())
    print('大保健....')
    print(atm.__next__())
    print(atm.__next__())
    print(atm.__next__())
    
    #通过yield可以生成一个迭代器;
    # 异步的需求
    #函数执行了一半去干别的事情,回来之后还能回到断点;
    # 生成器简单的实现了一个异步的需求,可以保存程序的断点;
    # 第一次是显示100(yield会直接返回)当进入下一次继续来执行的时候又回到yield的断点,继续执行下面的内容),第二次是又来取钱了再取钱,然后yield,接下来就是重复了,
    
    
    
    
  • 相关阅读:
    让PHP程序永远在后台运行
    discuz3.2x增加邮箱验证功能
    UML类图几种关系的总结
    UML中九种图的理解
    什么是UML类图
    仿了么项目,商品详情页开发
    仿饿了么项目,右侧商品组件动画,以及和购物车组件的联动效果,小球掉落效果
    外卖项目底部购物车组件编写
    仿饿了么外卖项目better-scroll插件的实战
    vue项目如何在手机上测试
  • 原文地址:https://www.cnblogs.com/bluesl/p/9079690.html
Copyright © 2020-2023  润新知