zoukankan      html  css  js  c++  java
  • 3.迭代器以及迭代器的作用

    #迭代器
    '''
    迭代是访问集合元素的一种方式,迭代器是一个能够记住遍历位置的对象
    迭代器对象从集合的第一个元素开始访问,直到所有的元素都被访问完结束
    如果想访问一个元素,需要把这个元素前面的所有元素都遍历后,才可以访问
    '''
    #1.可迭代的对象,像(1),(2)这些对象称之为可迭代对象(Iterable)
    #(1)以直接作用for循环的数据类型有:list/tuple/dict/set/str
    #(2)generator:生成器和生成器函数
    # list1 = [11,22,33]
    # for i in list1:
    #     print(i)
    # for char in 'i love china!':
    #     print(char)
    
    #2.判断是否迭代
    from collections import Iterable,Iterator
    # def outPrint(msg):
    #     #判断msg是否可迭代
    #     flag = isinstance(msg,Iterable)
    #     if flag:
    #         for i in msg:
    #             print(i)
    #     else:
    #         print(msg)
    # outPrint(1)
    # outPrint([11,22,33])
    
    #练习1
    # print(isinstance([],Iterable))#True
    # print(isinstance((),Iterable))#True
    # print(isinstance({},Iterable))#True
    # print(isinstance('love',Iterable))#True
    # print(isinstance((x for x in range(10)),Iterable))#True
    
    # 生成器不但可以作用于for循环,还可以被next函数不断调用,并饭后下一个值,直到
    # 最后抛出StopIterable异常,表示无法返回下一个值
    
    #练习2
    #可以被next()函数调用并不断返回下一个值的对象称之为迭代器(Iterator)
    #如果是迭代器对象那一定可迭代
    #判断迭代器对象
    # print(isinstance([],Iterator))#False
    # print(isinstance((),Iterator))#False
    # print(isinstance({},Iterator))#False
    # print(isinstance('love',Iterator))#False
    # print(isinstance((x for x in range(10)),Iterator))#True
    
    #生成器都是Iterator对象,但list/dict/str虽然是Iterable,但不是Iterator
    
    #iter()函数
    #把list/dict/str等等Iterable容器,变成Iterator
    list2 = [11,22,33]
    # print(next(list2))
    list2 = iter(list2)
    print(next(list2))
    print(next(list2))
    print(next(list2))
    # print(next(list2))
    '''
    总结:
    1.凡是可作用于for循环的对象都是Iterable
    2.凡是可作用于next()的函数的对象都是Iterator
    3.iter()函数用于把Iterable容器,变成Iterator
    
    迭代器延展:
    对于"流式"数据处理方式可减少内存消耗:
    比如处理文件,大视频等,一下猛地把全部数据取出来放到内存里就会导致程序消耗大量内存
    一般我们一部分一部分的对文件进行处理
    '''
    for text_line in open('userInfo.txt'):
        print(text_line)
        break
  • 相关阅读:
    VGG卷积神经网络模型解析
    利用Azure内容审查器审查违规内容(上)
    Kotlin + 协程 + Retrofit + MVVM优雅的实现网络请求
    OpenCV 实现图片的水平投影与垂直投影,并进行行分割
    C#自定义ip控件
    C#、Java中的一些小知识点总结(持续更新......)
    WinForm程序,实现只启动一个实例
    将DLL文件直接封装进exe执行文件中(C#)
    WinForm下的loading框的实现
    获取串口映射的COM端口号
  • 原文地址:https://www.cnblogs.com/zhangboblogs/p/8634572.html
Copyright © 2011-2022 走看看