迭代器:能被next()调用并不断返回下一个值的对象为迭代器,迭代器是对象
1.概念:迭代器指的是迭代取值的工具,迭代是一个重复的过程,每次重复都是基于上一次的结果而继续的,单纯的重复不是迭代
2.特征:并不依赖索引,而是通过next指针(内存地址寻址)迭代所有数据,一次只取一个值,而不是一股脑把所有数据放进内存,大大节省空间
1.创建可迭代对象并检测
strvar={'a','b','c'}
#查询对象属性
lst=dir(strvar)
print(lst)
#判断是否是可迭代对象
res = '__iter__'in lst
print(res)
输出内容:
['__and__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
True
2.创建一个迭代器
用iter()来创建
strvar={'a','b','c'}
it = iter(strvar)
print(it)
输出结果:为对象以及其内存地址
<set_iterator object at 0x000001AFD8569080>
3.判断一个迭代器
必须__next__和__iter__都有才能确定为迭代器
res = dir(it)
a = '__next__' in res and '__iter__' in res
print(a) #输出True
4.如何应用一个迭代器
利用next()每次只能调用一个数据,是单向不可逆的过程
a = next(it)
print(a)
若想重新调用,可以重置迭代器
调用迭代器方法二:
print(a.__next__())
5.调用迭代器的其他方法
(1)只用for
it = iter(strvar)
for i in it:
print(i)
(2)for+next
it = iter(strvar)
for i in range(2):
print(next(it))
6.判断迭代器/可迭代对象的其他方法
from collections import Iterable,Iterator
res=isinstance(it,Iterator)
print(res)