1.迭代器的定义:
字面意思:更新迭代,器:工具,可更新迭代的工具。
专业角度:内部含有'__iter__'方法且含有'__next__'方法的对象就是迭代器
2.可迭代对象与迭代器的对比
可迭代对象是一个操作方法较多、比较直观、存储数据较少的一个数据集。侧重于对数据可以灵活处理,内存足够大,可以将数据集 设置为可迭代对象
迭代器是一个非常节省内存,可以记录取值位置,可以通过循环+next()方法取值,但是不直观,操作方法比较单一的数据集。
当你的数据量过大时,以节省内存为首选因素时,就可以将数据集设置为迭代器
3.优点
1.节省内存
2.惰性机制:即next()一次,取一个值,绝不多取
4.缺点
1.不能直观的查看里面的数据
2.取值时只能依次向下取值
3.速度慢
# 判断是否是迭代器:'__iter__' and '__next__' in dir(对象) with open('gg.txt', encoding='utf-8', mode='w') as f: print(('__iter__' and '__next__') in dir(f)) f.write('文件句柄是迭代器噢!')
# 可迭代对象可以转化成迭代器 s1 = 'dsfdsf' # obj = s1.__iter__() obj = iter(s1) # 将s1转化为迭代器 print(obj) # print(obj.__next__()) print(next(obj)) # 利用迭代器对s1进行直接依次取值 l1 = [11, 22, 33, 44, 55, 66] iter_l1 = iter(l1) print(next(iter_l1)) print(next(iter_l1)) print(next(iter_l1)) print(next(iter_l1)) print(next(iter_l1)) print(next(iter_l1))
# 迭代器在进行迭代取值时永远会记住当前所在的位置 l2 = [1, 2, 3, 4, 5, 6, 7, 8, 9] obj2 = iter(l2) for i in range(4): print(next(obj2)) for i in range(4, 9): print(next(obj2))