zoukankan      html  css  js  c++  java
  • 迭代器

    一、理解迭代器

    迭代,重复产生结果的一个过程。上一次产生的结果为下一次产生结果的初始状态。

    迭代器,用来迭代的工具。

    可迭代对象:内置__iter__方法的对象。

    1 'alex'.__iter__()
    2 [2,4,6].__iter__()
    3 (1,2,3).__iter__()
    4 {'name':'alex','age':20}.__iter__()
    5 {'alex','lvqj'}.__iter__()
    6 open('a.txt','r','utf-8').__iter__()

    迭代器对象:内置__iter__方法又内置__next__方法的对象。

    #列表、字符串、元组可通过索引来获取元素,字典、集合则需要通过迭代器来迭代里面的元素。

    #'alex'.__iter__()得到的迭代器对象仍然是一个迭代器对象。'alex'.__iter__().__iter__()。

    #迭代器对象一定是可迭代对象,而可迭代对象不一定是迭代器对象。

    二、迭代器的使用

    1 l = [1,2,3,4,5]
    2 iter_l = l.__iter__()
    3 print(iter_l.__next__())   #等同于print(next(iter_l))

    #当可迭代对象中无法被找到下一个结果时会抛出StopIteration异常,通常捕获该异常即可。

    1 try:
    2   print(iter_l.__next__())
    3 except StopIteration:
    4       break

    三、for循环工作原理

    for循环在工作的过程中,首先在内部对可迭代对象调用__iter__方法获取到迭代器对象,再一次一次的去通过迭代器对象调用__next__方法获取迭代的结果。

    1 p = {'name':'alex','age':22}
    2 for k in p:
    3   print(k,'->',p[k])

    四、迭代器优缺点

    优点:可以不基于索引的方式获取可迭代对象中的元素。惰性计算,节省内存。

    #获取文件中的内容,传统的方式是读取文件中的内容到内存空间中,极大占用内存空间。而使用迭代器可以一个迭代读取一段内容,充分节省内存空间。

    缺点:不能知道可迭代对象的长度。只能往前走,不能往后走。

  • 相关阅读:
    BZOJ 4769: 超级贞鱼 逆序对 + 归并排序
    BZOJ 4897: [Thu Summer Camp2016]成绩单 动态规划
    luogu 4059 [Code+#1]找爸爸 动态规划
    CF718C Sasha and Array 线段树 + 矩阵乘法
    计蒜客 2238 礼物 期望 + 线段树 + 归并
    BZOJ 2157: 旅游 (结构体存变量)
    BZOJ 3786: 星系探索 ETT
    BZOJ 3545: [ONTAK2010]Peaks 启发式合并 + 离线 + Splay
    Spring的几种初始化和销毁方法
    SpringCloud之Zuul高并发情况下接口限流(十二)
  • 原文地址:https://www.cnblogs.com/lvqiuji/p/9535532.html
Copyright © 2011-2022 走看看