1.导包
from collections.abc import Iterable, Iterator
2.isinstance(,)
x = [1,2,3,'asd']
print(isinstance(x,Iterable))
判断x是否可以迭代,结果返回True
3.列表和一个最简单的生成器
y = [x for x in range(10)] # y是一个列表,可迭代,不是迭代器,只是里面存放了可迭代对象
z = (x for x in range(10)) # z是一个最简单的生成器,可迭代,是特殊的迭代器
print(isinstance(iter(y),Iterable)) # iter()(生成一个迭代器)
print(isinstance(y,Iterable)) # True,列表可迭代
print(isinstance(y,Iterator)) # False,列表不是迭代器
print(isinstance(z,Iterator)) # True,生成器是迭代器
4.创建一个迭代器类
class MyIterator(object):
# 这个类实现的是迭代器类
def __init__(self, newlist):
self.newlist = newlist
# 记录的是当前迭代的索引
self.current_index = 0
def __iter__(self):
#当前的类中,因为iter这个魔法方法获取的是__iter__方法中的迭代器
# 初始化一个迭代器
iterobj = self.newlist
return iterobj
def __next__(self):
# 当前的魔法方法记录遍历的位置,第二个功能是记录需要获取的值
if self.current_index < len(self.newlist): # 控制下标在列表长度内
self.current_index += 1 # 让下标向前移动
return self.newlist[self.current_index-1] # 返回之间位置的元素
else:
raise StopIteration # 当下标越界时,生成一个停止迭代的异常
5.验证生成的迭代器
if __name__ == '__main__':
obj = MyIterator([1,2,3,4,5,6,7,8,9]) # 实例化一个obj对象
while True:
try:
print(next(obj)) # next进行下一个元素的迭代访问
except StopIteration: # 捕获停止迭代异常,退出while循环,不再迭代打印
break