博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day13 for内部机制详解,迭代器
阅读量:6994 次
发布时间:2019-06-27

本文共 1710 字,大约阅读时间需要 5 分钟。

迭代器定义:    可迭代协议:含有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 = 03 while index
  既然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))

 

 

转载于:https://www.cnblogs.com/shijieli/p/9705435.html

你可能感兴趣的文章