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))#每次返回一个元素
    

      

      

  • 相关阅读:
    5.5,5.6
    5.1,5.2
    第四章.编程练习
    多源最短路径--flody算法
    Java 面试题
    python 打包exe程序
    sql优化
    二叉树
    todo: 队列、栈、散列集
    java注解
  • 原文地址:https://www.cnblogs.com/shuzhixia/p/9797021.html
Copyright © 2011-2022 走看看