# 迭代器协议:内部含有__iter__()方法的是可迭代对象,同时含有__iter__()和__next__()是迭代器,可用dir来查看对象内部含有的方法
# 当我们遇到一个新的变量,不确定它是否可for循环,就先判断一下:dir('变量') 看他有没有__iter__()方法
# 迭代器的好处: 1,能从容器中一个一个取值,会把所有的值都只取一遍,取到最后一个值的时候通过一个异常来自动结束循环
# 2,节省内存:值是要一个现场给一个,而不是一下全部生成 :range 文件句柄
实例1:
>>> list1 = [1,2,3]
lterator = list1.__iter__() # 可迭代的对象执行__iter__()方法后就是一个迭代器:listiterator object
print(dir(l))
print(dir(lterator))
>>> print(Iterator.__next__()) #迭代器执行__next__(),遍历每一个值,到最后一个时用一个异常来停止
1
>>> print(Iterator.__next__())
2
>>> print(Iterator.__next__())
3
>>> print(Iterator.__next__())
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
print(Iterator.__next__())
StopIteration
实例2:
>>>for i in list1:
print(i)
1
2
3
# for循环的内部就是执行一个个__next__()
iterator = list1.__iter__() 先生成一个迭代器
>>> print(Iterator.__next__())
1
>>> print(Iterator.__next__())
2
>>> print(Iterator.__next__())
3
>>> print(Iterator.__next__())