可迭代对象
-
字面意思:对象?Python中一切皆对象,一个实实在在的值,对象。
-
可迭代:更新迭代,重复的,循环的一个过程,更新迭代每次都有新的内容,可以进行循环更新的一个实实在在的值
-
专业的角度:内部含有’iter’方法的对象,可迭代对象。
例如:str list tuple dict set range 文件句柄 -
获取对象的所有方法且以字符串的形式表现:dir()
-
判断一个对象是否是可迭代对象:
s1 = 'fsjef'
print('__iter__'in dir(s1))
####
True
优点:
- 1、存储的数据直接显示,比较直观
- 2、拥有的方法比较多,操作方便
缺点: - 1、占用内存
- 2、不能直接通过for 循环,不能直接取值(索引,key)
迭代器
-
字面意思:更新迭代 、器 :工具:可更细迭代的工具
-
专业角度:内部含有’iter’方法并且含有’next’方法的对象就是迭代器
-
可以判断是否是迭代器:'iter’and’next’在不在dir(对象)
-
判断一个对象是否是迭代器
with open('文件1',encoding='utf-8',mode='w') as f1:
print(('__iter__' in dir(f1)) and ('__next__' in dir(f1)))
True
- 迭代器的取值
s1 = 'fsafef'
obj = iter(s1)
print(next(obj)) #每运行一次next取一次值,并且会记住上一次的取值
print(next(obj))
#####
f
s
-
可迭代对象如何转化为迭代器
iter([1,2,3]) -
while循环模拟for循环机制
l1 = [11,22,33,44,55,66,77,88]
#将可迭代对象转化成迭代器
obj = iter(l1)
while 1:
try:
print(next(obj))
except StopIteration:
break
###
11
22
33
44
55
66
77
88
Process finished with exit code 0
优点:
- 1、节省内存
- 2、惰性机制,next一次,取一次值。
缺点: - 速度慢
- 不走回头路
可迭代对象与迭代器的对比
- 可迭代对象是一个操作方法比较多,比较直观,存储数据相对少(几百万对象8G内存是可以承受的)的一个数据集
- 当你侧重于对数据可以灵活处理,并且内存空间足够,将数据集设置为可迭代对象是明确的选择
- 迭代器是也非常节省内存,可以记录取值位置,可以直接通过循环+next方法取值,但是不直观,操作方法比较单一的数据集
- 当你的数据量过大,达到足矣撑爆你的内存或者你以节约内存为首选因素时,将数据集设置为迭代器是一个不错的选择
对比
#可迭代对象
l1 = [11,22,33,44,55,66,77,88]
for i in range(3):
print(l1[i])
for i in range(5):
print(l1[i])
####打印结果
11
22
33
11
22
33
44
55
Process finished with exit code 0
#迭代器
l1 = [11,22,33,44,55,66,77,88]
obj = iter(l1)
for i in range(3):
print(next(obj))
for i in range(5):
print(next(obj))
###打印结果
11
22
33
44
55
66
77
88
Process finished with exit code 0