迭代器定义:
字面意思:更新迭代,器:工具。:可更新迭代的工具
专业角度:内部含有
‘__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
可迭代对象如何转化成迭代器,迭代器的取值:
可迭代对象转化成迭代器
iter(对象) # 对象.__iter__()
取值
next(obj) # 对象.__next__()
# 可迭代对象可以转化为迭代器
# s1 = ‘asdfg‘
# obj = iter(s1) # s1.__iter__()
# print(obj) # <str_iterator object at 0x0306DEF0>
# print(next(obj)) # a
# print(next(obj)) # s
# print(next(obj)) # d
# print(next(obj)) # f
# print(next(obj)) # g
# l1 = [11,22,33,44]
# obj = iter(l1)
# print(next(obj)) # 11
# print(next(obj)) # 22
# print(next(obj)) # 33
# print(next(obj)) # 44
优点
缺点
可迭代对象与迭代器的对比
可迭代对象是一个操作方法比较多,比较直观,存储数据相对少(几百万个对象,8G内存是可以承受的)的一个数据集。
当你侧重于对于数据可以灵活处理,并且内存空间足够,将数据集设置为可迭代对象是明确的选择。
迭代器是一个非常节省内存,可以记录取值位置,可以直接通过循环+next方法取值,但是不直观,操作方法比较单一的数据集。
当你的数据量过大,大到足以撑爆你的内存或者你以节省内存为首选因素时,将数据集设置为迭代器是一个不错的选择。
利用while循环模拟for循环对可迭代对象进行取值的机制。
l1 = [1,2,3,4,5,6,7,8,9,10,11,12]
obj = iter(l1)
while 1:
try:
print(next(obj))
except StopIteration:
break
原文:https://www.cnblogs.com/szheng/p/13121816.html