作家
登录

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

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

在懂得Python的数据构造时,容器(container)、可迭代对象(iterable)、迭代器(iterator)、生成器(generator)、列表/集合/字典推导式(list,set,dict comprehension)浩瀚概念参杂在一路,不免让初学者一头雾水,我将用一篇文┞仿试图将这些概念以及它们之间的关系捋清跋扈。

容器(container)

容器比较轻易懂得,因为你就可以把它看作是一个盒子、一栋房子、一个柜子,琅绫擎可以塞任何器械。大年夜技巧角度来说,当它可以用来询问某个元素是否包含在个中时,那么这个对象就可以认为是一个容器,比如 list,set,tuples都是容器对象:

  1. >>> assert 1 in [1, 2, 3]      # lists 
  2.  
  3. >>> assert 4 not in [1, 2, 3] 
  4.  
  5. >>> assert 1 in {1, 2, 3}      # sets 
  6.  
  7. >>> assert 4 not in {1, 2, 3} 
  8.  
  9. >>> assert 1 in (1, 2, 3)      # tuples 
  10.  
  11. >>> assert 4 not in (1, 2, 3)  

询问某元素是否在dict顶用dict的中key:

  1. >>> d = {1: 'foo', 2: 'bar', 3: 'qux'
  2.  
  3. >>> assert 1 in d 
  4.  
  5. >>> assert 'foo' not in d # 'foo' 不是dict中的元素  

询问某substring是否在string中:

  1. >>> s = 'foobar' 
  2.  
  3. >>> assert 'b' in s 
  4.  
  5. >>> assert 'x' not in s 
  6.  
  7. >>> assert 'foo' in s  

尽管绝大年夜多半容器都供给了某种方法来获取个中的每一个元素,但这并不是容器本身供给的才能,而是可迭代对象付与了容器这种才能,当然并不是所有的容器都是可迭代的,比如:Bloom filter,固然Bloom filter可以用来检测某个元素是否包含在容器中,然则并不克不及安闲器中获取个中的每一个值,因为Bloom filter压根就没把元素存储在容器中,而是经由过程一个散列函数映射成一个值保存在数组中。

都可以用生成器函数来调换:

可迭代对象(iterable)

刚才说过,很多容器都是可迭代对象,此外还有更多的对象同样也是可迭代对象,比如处于打开状况的files,sockets等等。但凡是可以返回一个迭代器的对象都可称之为可迭代对象,听起来可能有点困惑,没紧要,先看一个例子:

  1. >>> x = [1, 2, 3] 
  2.  
  3. >>> y = iter(x) 
  4.  
  5. >>> z = iter(x) 
  6.  
  7. >>> next(y) 
  8.  1/5    1 2 3 4 5 下一页 尾页

      推荐阅读

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

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


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

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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