欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

迭代器

最编程 2024-04-17 21:37:12
...

迭代器:

  1. 可迭代对象

    • 字面意思:

      • 对象:python中一切皆对象,一个实实在在的值

      • 可迭代:更新迭代,重复循环的一个过程,更新迭代每次都有新的内容,可以进行循环更新带的一个实实在在的值

      • 专业角度:可迭代对象是内部含有__iter__方法的对象,就是可迭代对象。目前学过的 str list tuple dict set range 文件句柄

      • 获取一个对象的所有方法 dir()

        • s1 = '123'
          print('__iter__' in dir(s1))
          # True
          
        • 优点:

          1. 储存的数据直接能显示,比较直观
          2. 拥有的方法比较多
        • 缺点:

          1. 占用内存。
          2. 不能直接通过for循环,不能直接取值(索引,key)
    • 迭代器的定义

      • 字面意思:更新迭代,器:工具:可更新迭代的工具

      • 专业角度:内部含有__iter__方法并且含有__next__方法的对象就是迭代器

      • 可以判断是否是迭代器__iter__and__next__在不在dir()里

      • 可迭代对象可以转化成迭代器

        s1 = 'faveebbwa'
        obj = iter(s1) #s1.__iter__也可以将这个字符串转化成迭代器
        print(obj)
        取值操作
        print(next(obj)) #print(obj.__next__())也可以对这个迭代器进行取值
        
      • 判断一个对象是不是迭代器

        with open('文件一','w',encoding='utf-8') as f1:
            print('__iter__' in dir(f1) and '__next__' in dir(f1))
        
    • 迭代器的取值:

      s1 = [11,22,33,44]
      obj = iter(s1)
      print(obj)
      print(next(obj))
      print(next(obj))
      print(next(obj))
      
    • 小结

      • 字面意思:更新迭代,器:工具:可更新迭代的工具

      • 专业角度:内部含有__iter__方法并且含有__next__方法的对象就是迭代器

      • 优点:

        1. 节省内存:(在文件使用中readline如果读取的100g的文件内存会直接爆炸,但是迭代器只会一行一行的读取,读完一行就会在内存中删除,只会占一行内存,极大的节省了内存)
        2. 惰性机制:next一次 只会取一个值

        有一个迭代器模式可以很好的解释上面这两条:迭代器是数据处理的基石,扫描内存中放不下的数据时,我们要找到一个惰性获取数据项的方式,即按一次获取一个数据项,这就是迭代器方式。

      • 缺点:

        1. 速度慢 以时间换空间
        2. 不走回头路
      • 可迭代对象与迭代器的对比:

        1. 可迭代对象是一个操作方法比较多,比较直观,存储数据相对少的一个数据集。
        2. 当你侧重于对于数据可以灵活处理,并且内存足够多,将数据集设置为可迭代对象是明确的选择。
        3. 是一个非常节省内存,可以记录取值位置,可以直接通过循环next方法取值,但是不直观,操作方法比较单一的数据集。
        4. 当你的数据量过大,大到足以撑爆内存或者当以节省内存为主选因素时,将数据集设置为迭代器是一个不错的选择。(几百万个数据对象,8g内存是可以承受的)
    • 利用while循环模拟for循环机制(面试题):

      1. 将可迭代对象转换成迭代器
      l1 = [1,2,3,4,5,6,7,8,9]
      obj = iter(l1)
      while True:
          try:
              print(next(obj))
          except StopIteration:
              break