迭代器

概念

我们已经知道,可以直接作用于for 循环的数据类型有一下几种:
1、一类是集合数据类型,如list、tuple、dict、set、str等;
2、一类是generator(生成器),包括生成器和带yield的generator funcation;
(带yield的函数生成器和列表生成器)
 
这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。
可以使用isinstance()判断一个对象是否是Iterable对象:
 
 

创建迭代器对象的方法

一、iter()函数获得一个Iterator对象。
list、tuple、dict、set、str等数据类型可以用iter()函数转换成迭代器
例如:
 1 1、正常循环一个序列:
 2 for i in [1,2,3,4,5,6,7,8,9]
 3    pass
 4     .....
 5 
 6 2、用迭代器循环一个序列:
 7 #首先获得Iterator对象:
 8 it = iter([1,2,3,4,5])
 9 
10 #循环对象:
11 while True:
12     try:
13         #获得下一个值:
14         x = next(it)
15     except  StopIteration:
16         #遇到StopIteration就退出循环:
17         break
18 
19 
20 #注意:上下两个完全等价
列表循环

 

二、跌倒器就是可以迭代的对象。
 1 def myrange(arg):
 2     start = 0
 3     while True:
 4         if start > arg:
 5             return
 6         yield  start
 7         start += 1
 8 ret = myrange(3)
 9 r = ret.__next__()  #进入函数,找到yield,获取yield后面的数据,每运行一次,生成器就会往下执行一个数值:
10 print(r)
11 r = ret.__next__()
12 print(r)
13 r = ret.__next__()
14 print(r)
15 r = ret.__next__()
16 print(r)
迭代器实例

 

三、用途:
socket的时候会用到,但是代码复杂性增加
迭代器就类似于概念性的一个知识点
迭代器就是由__next__可以一个一个提取的,类似于for循环的,逐步取值的,就叫做迭代器。
例如
1、一个列表,然后用for进行遍币,其实就是执行了r = ret.__next__();
2、当迭代到最后一个值时,按理说取完后会报错的,但是由于封装到foread

 

 

 

 
 
 
 
 
posted @ 2017-12-25 17:32  风之岚翔  阅读(313)  评论(0编辑  收藏  举报