• day13 for内部机制详解,迭代器


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

    
    
    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__())
    如果不要for 循环我们可以用while来循环达到相同的效果
    1 l = [1,2,3,4,5]
    2 index = 0
    3 while index<len(l):
    4     print(l[index])
    5     index += 1
      既然while可以完成工作,为毛还需要for呢?
      while你很能啊,字典集合哪来的下标,你再试试看啊?
      而for是可以的。for可以遍历非序列类型,文件,字典,集合,在这一点上for循环就甩开了while十条街。

    集合的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__())
    字典的for循环机制
      字典的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__())
    文件的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__())


    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))










  • 相关阅读:
    不同编码字符所占大小
    期末考点总结--------多元统计分析
    博客网站设计
    java 事件举例
    zookerper总结
    Spring java配置
    Sense and Sensibility
    栈的出栈序列个数
    闭算子
    线性空间结论总结
  • 原文地址:https://www.cnblogs.com/shijieli/p/9705435.html
Copyright © 2020-2023  润新知