概念
我们已经知道,可以直接作用于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