Python之第十三天的努力--迭代器2

01 迭代器2

  1. 迭代器定义:

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

    • 专业角度:内部含有

      '__iter__'
      

      方法并含有

      '__next__'
      

      方法的对象就是迭代器

    • 可以判断是不是迭代器:

      '__iter__'
      

      and

      '__next__'
      

      在不在dir(对象)

    • # 文件句柄
      with open('文件1',encoding='utf-8',mode='w') as f1:
          print(('__iter__'in dir(f1)) and ('__next__'in dir(f1)))   # True
      
  2. 可迭代对象如何转化成迭代器,迭代器的取值:

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

      iter(对象)     # 对象.__iter__()
      
    • 取值

      next(obj)     # 对象.__next__()
      
    • # 可迭代对象可以转化为迭代器
      # s1 = 'asdfg'
      # obj = iter(s1)     # s1.__iter__()
      # print(obj)         # 
      # print(next(obj))   # a
      # print(next(obj))   # s
      # print(next(obj))   # d
      # print(next(obj))   # f
      # print(next(obj))   # g
      
      # l1 = [11,22,33,44]
      # obj = iter(l1)
      # print(next(obj))     # 11
      # print(next(obj))     # 22
      # print(next(obj))     # 33
      # print(next(obj))     # 44
      
  3. 优点

    • 节省内存。
    • 惰性机制。
  4. 缺点

    • 速度慢
    • 不走回头路
  5. 可迭代对象与迭代器的对比

    • 可迭代对象是一个操作方法比较多,比较直观,存储数据相对少(几百万个对象,8G内存是可以承受的)的一个数据集。

    • 当你侧重于对于数据可以灵活处理,并且内存空间足够,将数据集设置为可迭代对象是明确的选择。


    • 迭代器是一个非常节省内存,可以记录取值位置,可以直接通过循环+next方法取值,但是不直观,操作方法比较单一的数据集。

    • 当你的数据量过大,大到足以撑爆你的内存或者你以节省内存为首选因素时,将数据集设置为迭代器是一个不错的选择。

  6. 利用while循环模拟for循环对可迭代对象进行取值的机制。

    l1 = [1,2,3,4,5,6,7,8,9,10,11,12]
    
    obj = iter(l1)
    while 1:
        try:
            print(next(obj))
        except StopIteration:
            break
    

你可能感兴趣的:(Python之第十三天的努力--迭代器2)