Fay

迭代器

 
迭代器: 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

posted on 2018-06-25 02:22  sunny7  阅读(143)  评论(0编辑  收藏  举报

导航