作家
登录

完全理解Python迭代对象、迭代器、生成器

作者: 来源: 2017-06-27 10:03:38 阅读 我要评论

 
  •  
  • >>> next(y) 
  •  
  •  
  • >>> next(z) 
  •  
  •  
  • >>> type(x) 
  •  
  • <class 'list'
  •  
  • >>> type(y) 
  •  
  • <class 'list_iterator' 
  • 容器是一种把多个元素组织在一路的数据构造,容器中的元素可以逐个地迭代获取,可以用in, not in关键字断定元素是否包含在容器中。平日这类数据构造把所有的元素存储在内存中(也有一些特例,并不是所有的元素都放在内存,比如迭代器和生成器对象)在Python中,常见的容器对象有:

    • list, deque, ….
    • set, frozensets, ….
    • dict, defaultdict, OrderedDict, Counter, ….
    • tuple, namedtuple, …
    • str

    这里x是一个可迭代对象,可迭代对象和容器一样是一种通俗的叫法,并不是指氖刂具体的数据类型,list是可迭代对象,dict是可迭代对象,set也是可迭代对象。y和z是两个自力的迭代器,迭代器内部持有一个状况,该状况用于记录当前迭代地点的地位,以便利下次迭代的时刻获取精确的元素。迭代器有一种具体的迭代器类型,比如list_iterator,set_iterator。可迭代对象实现了__iter__办法,该办法返回一个迭代器对象。

    1. x = [1, 2, 3] 
    2.  
    3. for elem in x: 
    4.  
    5. ...  

    实际履行情况是:

    参考链接:https://docs.python.org/2/library/stdtypes.html#iterator-types

    反编译该段代码,你可以看到说冥器显示地调用GET_ITER指令,相当于调用iter(x),FOR_ITER指令就是调用next()办法,赓续地获取迭代器中的下一?元素,然则你没法直接大年夜指令中看出来,因为他被说冥器优化过了。

    1. >>> import dis 
    2.  
    3. >>> x = [1, 2, 3] 
    4.  
    5. >>> dis.dis('for _ in x: pass'
    6.  
    7.   1           0 SETUP_LOOP              14 (to 17) 
    8.  
    9.               3 LOAD_NAME                0 (x) 
    10.  
    11.               6 GET_ITER 
    12.  
    13.         >>    7 FOR_ITER                 6 (to 16) 
    14.  
    15.              10 STORE_NAME               1 (_) 
    16.  
    17.              13 JUMP_ABSOLUTE            7 
    18.  
    19.         >>   16 POP_BLOCK 
    20.  
    21.         >>   17 LOAD_CONST               0 (None) 

        推荐阅读

        9个实战及面试常用Shell脚本编写

      留意事项2)语法缩进,应用四个空格;多加注释解释。3)定名建议规矩:变量名大年夜写、局部变量小写,函数名小写,名字表现出实际感化。4)默认变量是全局的,在函数中变量local指定为局部变>>>详细阅读


      本文标题:完全理解Python迭代对象、迭代器、生成器

      地址:http://www.17bianji.com/lsqh/35917.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)