迭代器
迭代器: Iterator
迭代器含有__iter__,还含有__next__,遵循迭代器协议,就表示是一个迭代器.
f文件句柄, enmuerate枚举,也是一个迭代器
l1 = [1, 2, 3, 4]
print(l1.__iter__()) # 可迭代对象转化成迭代器 .__iter__() -->迭代器
如何判断是不是一个迭代器?举例说明
l1 = [1, 2, 3, 4]
l1_obj = l1.__iter__()
print('__iter__' in dir(l1_obj)) #返回True
print('__next__' in dir(l1_obj)) #返回True
l1 = [1, 2, 3, 4]
from collections import Iterator
print(isinstance(l1_obj, Iterator))#返回True
所以要判断是不是一个迭代器,是要满足条件,即"
方法一;
print('__iter__' in dir(要判断对象名称)) #返回True
print('__next__' in dir(要判断对象名称)) #返回True
方法二
from collections import Iterator
print(isinstance(l1_obj, Iterator))#返回True
迭代器的取值:要么就用next,要么就for 循环
l1 = [1, 2, 3, 4]
l1_obj = l1.__iter__()
print(l1_obj.__next__())#1
print(l1_obj.__next__())#2
print(l1_obj.__next__())#3
print(l1_obj.__next__())#4
再打印一次就会报错,只有4个值,就只能打印4次
说明 .__next__是迭代器取值的唯一条件,也是一个一个的取值.
引出,迭代器的特点:
1, 节省内存空间
2, 满足惰性机制 <打印一个值就出来一个值,你next一下,就去一个值,在内存中只占一个>
3, 不能反复的取值,不可以逆.<取一条就走到下一条,前面的取不到,不可返回>
来看一下for循环是怎么取值的
l1 = [1, 2, 3, 4]
for i in l1:
print(i)
for循环的内部机制是:
1, 将可迭代对象转化为迭代器
2, 内部使用__next__方法取值
3, 运用了一场处理去处理报错
面试题:用while 循环模仿for 循环的机制,了解for 循环的内部机制去循环一个列表
l2 = [1, 2, 3, 4, 5, 6, 7, 8]
l2_obj = l2.__iter__()
while True:
try:
i = l2_obj.__next__()
print(i)
except Exce