可迭代对象和迭代器
迭代器
-
可迭代对象
字面理解:可循环,重复更新的对象
专业角度:内部含有'_inter _' 方法的对象
获取对象所有方法并且以字符串的形式表现出来:dir()
s1 = 'fdsg' l1 = [1,2,3] print(dir(s1)) print('__inter__' in dir(s1)) # True print('__inter__' in dir(range(10))) # True可迭代对象的优点:
1、存储的数据能直接显示,比较直观
2、拥有的方法比较多,操作方便
缺点:
1、占用内存,因为迭代器中的方法太多了,每次使用都要 全部加载出来
2、不能直接循环,必须通过迭代器转化才可以循环,不能 直接取值
-
迭代器
迭代器定义:
字面理解:可迭代更新的工具
专业角度:内部含有__ inter_ _ 和'_ _ next _'方法的对象就 是迭代器
#将可迭代对象转化成迭代器 s1 = 'fsdfsdf' obj = iter(s1) #或者 s1.__iter__() print(next(obj)) #或者 print(obj.__next__())#对迭代器取值,一个一个取 #迭代器的取值方法 ls = [11,22,33,44,55,66] a = iter(ls) print(next(a)) print(next(a)) print(next(a)) print(next(a)) print(next(a)) print(next(a))迭代器的优点:
节省内存:
迭代器在内存中相当于只占一个数据的空间:因为每次取值都会把上一条数据在内存中释放,加载当前的数据。
惰性机制:
next一次,取值一个,绝不过多取值
迭代器的缺点:
1、不能直观的看到里面的数据
2、取值时不走回头路,只能一直向下取值。
3、速度慢,以时间换空间
迭代器和可迭代对象对比
可迭代对象:私有方法比较多,操作灵活,比较直观,但是占有内存较多,而且不能直接通过循环迭代取值的一个数据集。
应用:当侧重于对数据可以灵活处理,并且有足够内存空间,将数据集设置为可迭代对象是明智的。
迭代器:是一个非常省内存,可以记录取值位置,可以通过循环+next的方法取值,但是不直观。
应用:当数据量非常大时,大到足以撑爆内存或者要求节省内存时使用。
#利用while循环模拟for循环对可迭代对象取值 l1 = [11,22,33,44,55,66,77,88,99,111] obj = iter(l1) while 1: try: print(next(obj)) except StopIteration: break

浙公网安备 33010602011771号