zoukankan      html  css  js  c++  java
  • python之路(6)迭代器和生成器

     目录

    • 迭代器(Iterator)
    • 生成器(Generator) 

      迭代器

    1. 迭代器协议:对象提供一个next方法,执行该方法要么返回下一项,要么引起一个Stopiteration异常
    2. 可迭代对象:实现了可迭代协议的对象(内部对象定义了_iter_()方法)
    name = 'chen'
    test_iter = name.__iter__()#生成一个可迭代对象
    print(test_iter)
    test_iter._next_()
    返回: <str_iterator object at 0x000001E9FD822550>

       注:for循环的本质是调用对象的next()方法和处理了Stopiteration异常操作  for i in name: print(i) 

          (除了for循环,map函数,reduce函数,sum函数都遵循可迭代协议)

     文件的迭代读取

    f = open('demo.txt','rb')
    
    #注:实际调用了f._iter_(),得到一个迭代器
    for i in f:
        print(i)

     生成器

      相当于一种数据类型,自动实现类可迭代协议,所以生成器也是可迭代对象

    • 生成器函数 
    def test():
        yield 1 #相当于return,但是可以返回多次
        yield 2
        yield 3
    
    g = test()
    print(g)
    
    #返回:<generator object test at 0x000002519608F750>
    • 生成器表达式 
    app_test =['苹果%s' %i for i in range(9999999)]#这个列表将占用大量内存
    
    generator_list = ('苹果%s' %i for i in range(9999999))#用生成器可以避免内存占用,每次返回一个元素
    print(next(generator_list))
    print(next(generator_list))
    print(next(generator_list))#每次返回一个元素
    

      

      

  • 相关阅读:
    pyqt动画的使用
    pyqt 自定义信号
    设计工具- QtDesigner
    样式控制-QSS 样式表
    布局管理之 QStackedLayout (堆 布局)
    布局管理之 QGridLayout (网格布局)
    布局管理之 QFormLayout (表单布局)
    看代码中
    公司同事好坑
    我要多开梦幻手游PC端(梦幻手游PC端多开的简单分析及实现办法)
  • 原文地址:https://www.cnblogs.com/shuzhixia/p/9797021.html
Copyright © 2011-2022 走看看