1. 迭代器定义:
    可迭代协议:含有iter方法的都是可以迭代的
    迭代器协议: 有.next 方法,和iter的都是迭代器
    必须存在终结
    特点:
    节省空间
    方便逐个取值,一个迭代器只能取一次
      简单来说:满足可迭代协议以及迭代器协议的就可以被定义为迭代器
          iter()-----等同于-------->.__iter__() 作用相等
  1.       next()-----等同于-------->.__next__() 作用相等
  1. 字符串,列表,元祖,字典,集合,文件对象 都不是可迭代对象
    除非加上__iter__()方法才可以迭代
    可迭代对象才可以调用__next__()方法

  1.  
  1. for循环机制内部原理
    1. 调用了_iter_()方法,把列表变成可迭代对象
    2. 调用_next_()方法迭代读取,直到捕捉到异常然后结束
    3. 捕捉到异常,处理异常状态然后正常结束for循环
  1. l = [1,2,3]
  2. for i in l:
  3. print(i)
  1. l = [1,2,3]
  2. iter_test = l.__iter__()
  3. print(iter_test.__next__())
  4. print(iter_test.__next__())
  5. print(iter_test.__next__())
  6. print(iter_test.__next__())
  1. 如果不要for 循环我们可以用while来循环达到相同的效果
  1. l = [1,2,3,4,5]
  2. index = 0
  3. while index<len(l):
  4. print(l[index])
  5. index += 1
  1.   既然while可以完成工作,为毛还需要for呢?
      while你很能啊,字典集合哪来的下标,你再试试看啊?
      for是可以的。for可以遍历非序列类型,文件,字典,集合,在这一点上for循环就甩开了while十条街。
  1. 集合的for循环机制
  1. dis = {1,2,3}
  2. # for i in dis:
  3. # print(i)
  4.  
  5. iter_dis = dis.__iter__()
  6. print(iter_dis.__next__())
  7. print(iter_dis.__next__())
  8. print(iter_dis.__next__())
  1. 字典的for循环机制
  1.   字典的for循环默认的执行得出的结果就是key的循环
  1. dic = {"a":1,"b":2}
  2. # for i in dic:
  3. # print(i)
  4. # print(dic[i])
  5.  
  6. iter_dic = dic.__iter__()
  7. print(iter_dic.__next__())
  8. print(iter_dic.__next__())
  1. 文件的for循环机制
  1. f = open("test.txt","r+")
  2. # for i in f:
  3. iter_f = f.__iter__()
  4. print(iter_f.__next__())
  5. print(iter_f.__next__())
  6. print(iter_f.__next__())

  1. next()-----等同于--------> .__next__()
  1. l = ["die","erzi","sunzi","chongsunzi"]
  2. iter_l = l.__iter__()
  3. # print(iter_l.__next__())
  4. # print(iter_l.__next__())
  5. # print(iter_l.__next__())
  6. # print(iter_l.__next__())
  7.  
  8. print(next(iter_l))
  9. print(next(iter_l))
  10. print(next(iter_l))
  11. print(next(iter_l))

  1.  

day13 for内部机制详解,迭代器的更多相关文章

  1. ElasticSearch 文档(document)内部机制详解

    1.数据路由 1.1 文档存储怎么路由到相应分片? 一个文档,最终会落在主分片的一个分片上,到底应该在哪一个分片?这就是数据路由. 1.2 路由算法 shard = hash(routing) % n ...

  2. 大数据Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  3. Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解

    转自:http://blog.csdn.net/iamdll/article/details/20998035 分类: 分布式 2014-03-11 10:31 156人阅读 评论(0) 收藏 举报 ...

  4. 从mixin到new和prototype:Javascript原型机制详解

    从mixin到new和prototype:Javascript原型机制详解   这是一篇markdown格式的文章,更好的阅读体验请访问我的github,移动端请访问我的博客 继承是为了实现方法的复用 ...

  5. ThreadPoolExecutor运转机制详解

    ThreadPoolExecutor运转机制详解 - 走向架构师之路 - 博客频道 - CSDN.NET 最近发现几起对ThreadPoolExecutor的误用,其中包括自己,发现都是因为没有仔细看 ...

  6. Java 反射 设计模式 动态代理机制详解 [ 转载 ]

    Java 反射 设计模式 动态代理机制详解 [ 转载 ] @author 亦山 原文链接:http://blog.csdn.net/luanlouis/article/details/24589193 ...

  7. 转 Java虚拟机5:Java垃圾回收(GC)机制详解

    转 Java虚拟机5:Java垃圾回收(GC)机制详解 Java虚拟机5:Java垃圾回收(GC)机制详解 哪些内存需要回收? 哪些内存需要回收是垃圾回收机制第一个要考虑的问题,所谓“要回收的垃圾”无 ...

  8. 深入理解mybatis原理, Mybatis初始化SqlSessionFactory机制详解(转)

    文章转自http://blog.csdn.net/l454822901/article/details/51829785 对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章 ...

  9. JavaScript运行机制详解

    JavaScript运行机制详解   var test = function(){ alert("test"); } var test2 = function(){ alert(& ...

随机推荐

  1. eclipse 报错Version 1.6.0_45 of the JVM is not suitable for this product. Version:1.7 or greater is required

    最近离职来了一家新公司,之前的公司的开发IDE用的是IntelliJIDEA和SpringSourceToolSuit,自己在家里用的也是MyEclipse,所以使用eclipse的经验还是不足.结果 ...

  2. tcp为什么是三次握手

    刷知乎看到的,很可爱啊哈哈哈就顺手黏贴过来了 作者:大闲人柴毛毛链接:https://www.zhihu.com/question/24853633/answer/254224088来源:知乎著作权归 ...

  3. CF1110H Modest Substrings AC自动机、DP

    传送门 如果\(r-l\)比较小,可以将所有满足条件的串扔进\(AC\)自动机然后在上面DP,从前往后确定字符串的每一位. 但是\(l,r \leq 10^{800}\)就十分不可行,所以需要优化这个 ...

  4. JS-JS变量命名规则

    原则 变量名区分大小写,允许包含字母.数字.美元符号($)和下划线,但第一个字符不允许是数字,不允许包含空格和其他标点符号. 禁止使用JavaScript关键词.保留字全名. 变量命名长度应该尽可能的 ...

  5. 验证码处理类:UnCodebase.cs + BauDuAi 读取验证码的值(并非好的解决方案)

    主要功能:变灰,去噪,等提高清晰度等 代码类博客,无需多说,如下: public class UnCodebase { public Bitmap bmpobj; public UnCodebase( ...

  6. 51nod 1295 XOR key 可持久化01字典树

    题意 给出一个长度为\(n\)的正整数数组\(a\),再给出\(q\)个询问,每次询问给出3个数,\(L,R,X(L<=R)\).求\(a[L]\)至\(a[R]\)这\(R-L+1\)个数中, ...

  7. libgdx学习记录27——线段与线段相交检测

    给定p1, p2, p3, p4四个点,p1,p2为一条线段,p3,p4为一条线段,检测其是否有交点. 可分为三种情况: 1. L2与x轴平行 2. L2与y轴平行 3. L2与坐标轴不平行. (L1 ...

  8. java 代码获取视频时长

    package test; import it.sauronsoftware.jave.Encoder; import it.sauronsoftware.jave.MultimediaInfo; i ...

  9. 从Stampery到Chronicled,区块链公证业务的实践

    Stampery就是这样一家利用比特币区块链技术代替公证人的创业公司,能为所有的敏感文件提供具有法律约束力的证明.可以用Stampery证明任何文件,它能很好地保护知识产权,证明遗嘱.宣誓.合同.家庭 ...

  10. Linux下分布式系统以及CAP理论分析

    CAP理论被很多人拿来作为分布式系统设计的金律,然而感觉大家对CAP这三个属性的认识却存在不少误区,那么什么是CAP理论呢?CAP原本是一个猜想,2000年PODC大会的时候大牛Brewer提出的,他 ...