• 迭代器


     
    迭代器: 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
  • 相关阅读:
    2013暑假集训B组训练赛第二场
    2013暑假集训B组训练赛第二场
    2013暑假集训B组训练赛第二场
    2013暑假集训B组训练赛第二场
    SPOJ ANARC05H 计数DP
    HDU 2586 LCA-Tarjan
    POJ 1330 LCA最近公共祖先 离线tarjan算法
    Codeforces 176B 经典DP
    UVA 10564 计数DP
    HDU 4901 多校4 经典计数DP
  • 原文地址:https://www.cnblogs.com/sunny7/p/9222501.html
Copyright © 2020-2023  润新知