• 可迭代对象与迭代器


    一, 可迭代对象

    • 字面意思分析:可以重复的迭代的实实在在的一个东西

    • 专业角度: 内部含有'iter'方法的对象,就是可迭代对象

      # 用内置函数dir()查看对象内部含有的所有方法,用in判断.
      print('__iter__' in dir(str))
      
    • 优点

      • 可以直观的查看里面的数据
      • 操作方法多
    • 缺点

      • 占用内存
      • 可迭代对象不能迭代取值(除去索引,字典的key以外)

    二, 迭代器

    • 典型的以时间换空间;字典是以空间换时间

    • 字面意思:可以重复迭代的工具

    • 专业角度:内部含有'iter'方法并且含有'next'方法的对象,就是迭代器

    • 由于迭代器也含有'iter'方法,所以迭代器也是可迭代对象

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

      l1 = [1,2,3,4,5]
      obj = iter(l1) # l1.__iter__()
      print(obj)  # <list_iterator object at 0x01A59090>
      
    • 迭代器可以迭代取值,利用next()进行取值

      l1 = [1,2,3,4,5]
      obj = iter(l1) # l1.__iter__()
      print(obj)  # <list_iterator object at 0x01A59090>
      print(next(obj)) # 一个next()对应一个值,多了就报错
      print(next(obj)) # 接着上次的位置,会记录位置
      print(next(obj))
      print(next(obj))
      print(next(obj))  
      print(next(obj)) # 超出值的个数,会报错 StopIteration
      
    • 利用while循环,模拟for循环内部循环可迭代对象的机制

      l1 = [1, 2, 3, 4, 5, 6]
      obj = iter(l1)
      while 1:
          try:
              print(next(obj))
          except StopIteration:    # 异常处理
              break
      
    • 迭代器是一条路走到底,不走回头路,会记录位置

      l1 = [22, 33, 44, 55, 66, 77]
      obj = iter(l1)
      for el in range(3):
          print(next(obj))
      for el in range(2):
          print(next(obj))
      
    • 迭代器的优点

      • 非常节省内存
      • 惰性机制,next()一次取值一次
    • 迭代器的缺点:

      • 不直观
      • 操作不灵活
      • 效率相对低

    三, 可迭代对象与迭代器的对比

    • 可迭代对象:可迭代对象是一个私有的方法比较多,操作灵活,比较直观,但是占用内存,而且不能直接通过循环迭代取值的一个数据集
    • 迭代器:是一个非常节省内存,可以记录取值位置,可以直接通过循环+next方法取值,但是不直观,操作方法比较单一的数据即
    • 当你侧重于对数据可以灵活处理,并且内存足够,将数据集设置为可迭代对象是明智的选择
    • 当你的数据量过大,将数据集设置为迭代器是一个不错的选择
  • 相关阅读:
    在你设计中可能用到的20个杂志 PSD 原型
    Gradify
    CamanJS – 提供各种图片处理的 JavaScript 库
    免费素材:包含 250+ 组件的 DO UI Kit
    24个很赞的 Node.js 免费教程和在线指南
    Dynamics.js
    Page Scroll Effects
    Slides
    15款加速 Web 开发的 JavaScript 框架
    Wee – 为现代 Web 开发打造的 CSS 脚手架
  • 原文地址:https://www.cnblogs.com/zyyhxbs/p/11051801.html
Copyright © 2020-2023  润新知