码迷,mamicode.com
首页 > 其他好文 > 详细

迭代器

时间:2019-01-31 19:13:48      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:hid   style   异常   hide   ===   exce   bsp   cdb   实现   

  • 迭代器协议:对象必须提供一个next方法,执行该方法的结束是要么返回迭代中的下一项,要么就引起一个Stoplteration异常以终止迭代(只能前进不能后退)
  • 可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义__iter__()方法)
  • 协议:一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for max min sum等函数)使用迭代器协议来访问对象

 

for循环机制:

  注:字符串、列表、元组、字典、集合、文件对象,这些本不是可迭代对象,故本身没有next方法,当用for遍历这些数据类型时,会进行下列操作:

    1.调用这些数据类型中的__iter__()方法,返回值赋值给一个变量,那么这个变量就是可迭代对象

    2.依据迭代器协议,调用__next__()方法,每调用一次就会返回其中的元素,当超出元素个数后,就会报StopIteration错,但是for循环会吞并这个错误,以此来终止循环。

 

技术分享图片for 循环机制
 1 #=====================================================列表
 2 # l = [1, 2, 5]
 3 # iter = l.__iter__()    #1.用对象中的__iter__()方法来将该对象转换为可迭代对象
 4 # print(iter.__next__()) #2.调用可迭代对象中的__next__()方法
 5 # print(iter.__next__())
 6 # print(iter.__next__())
 7 # print(iter.__next__())  #StopIteration
 8 
 9 # for item in l:
10 #     print(item)
11 
12 #=====================================================字典
13 # dict = {‘name‘: ‘chen‘, ‘age‘: 13}
14 # iter = dict.__iter__() #转换为可迭代对象
15 # print(iter.__next__())
16 # print(iter.__next__())
17 # print(iter.__next__()) #StopIteration
18 
19 # for item in dict:
20 #     print(item)
21 
22 #====================================================文件对象
23 f = open(test, r, encoding=utf-8)
24 # iter = f.__iter__()
25 # print(iter.__next__(), end=‘‘)
26 # print(iter.__next__(), end=‘‘)
27 # print(iter.__next__(), end=‘‘)
28 # print(iter.__next__(), end=‘‘)
29 
30 # for item in f:
31 #     print(item, end=‘‘)

 

 

用while循环模拟for循环机制:

 

技术分享图片
1 l = [1, 2, 3]
2 iter = l.__iter__()
3 while True:
4     try:
5         print(iter.__next__())
6     except StopIteration:
7         print(循环结束了哟!)
8         break
View Code

 

迭代器

标签:hid   style   异常   hide   ===   exce   bsp   cdb   实现   

原文地址:https://www.cnblogs.com/SakuraYuanYuan/p/10343077.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!