zoukankan      html  css  js  c++  java
  • 迭代器

     
    迭代器: 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
  • 相关阅读:
    Git 常用命令
    Python 常用算法记录
    Python基础Web服务器案例
    你真的懂SDWebImage?
    Core Data的那点事儿~
    看看 SDWebImage内部基本实现过程
    App上架流程 & 上架被拒10大原因
    KVO中你所不知道的"坑"
    math公式手写识别网址
    umi build出现的Path must be a string的问题解决
  • 原文地址:https://www.cnblogs.com/sunny7/p/9222501.html
Copyright © 2011-2022 走看看