Fork me on GitHub

可迭代对象和迭代器

迭代器

  • 可迭代对象

    字面理解:可循环,重复更新的对象

    专业角度:内部含有'_inter _' 方法的对象

    获取对象所有方法并且以字符串的形式表现出来:dir()

    s1 = 'fdsg'
    l1 = [1,2,3]
    print(dir(s1))
    print('__inter__' in dir(s1)) # True
    print('__inter__' in dir(range(10))) # True
    

    可迭代对象的优点:

    ​ 1、存储的数据能直接显示,比较直观

    ​ 2、拥有的方法比较多,操作方便

    缺点:

    ​ 1、占用内存,因为迭代器中的方法太多了,每次使用都要 全部加载出来

    ​ 2、不能直接循环,必须通过迭代器转化才可以循环,不能 直接取值

  • 迭代器

    迭代器定义:

    ​ 字面理解:可迭代更新的工具

    ​ 专业角度:内部含有__ inter_ _ 和'_ _ next _'方法的对象就 是迭代器

    #将可迭代对象转化成迭代器
    s1 = 'fsdfsdf'
    obj = iter(s1)  #或者 s1.__iter__() 
    print(next(obj)) #或者 print(obj.__next__())#对迭代器取值,一个一个取
    #迭代器的取值方法
    ls = [11,22,33,44,55,66]
    a = iter(ls) 
    print(next(a))
    print(next(a))
    print(next(a))
    print(next(a))
    print(next(a))
    print(next(a))
    

    迭代器的优点:

    ​ 节省内存:

    ​ 迭代器在内存中相当于只占一个数据的空间:因为每次取值都会把上一条数据在内存中释放,加载当前的数据。

    ​ 惰性机制:

    ​ next一次,取值一个,绝不过多取值

    迭代器的缺点:

    ​ 1、不能直观的看到里面的数据

    ​ 2、取值时不走回头路,只能一直向下取值。

    ​ 3、速度慢,以时间换空间

    迭代器和可迭代对象对比

    ​ 可迭代对象:私有方法比较多,操作灵活,比较直观,但是占有内存较多,而且不能直接通过循环迭代取值的一个数据集。

    ​ 应用:当侧重于对数据可以灵活处理,并且有足够内存空间,将数据集设置为可迭代对象是明智的。

    ​ 迭代器:是一个非常省内存,可以记录取值位置,可以通过循环+next的方法取值,但是不直观。

    ​ 应用:当数据量非常大时,大到足以撑爆内存或者要求节省内存时使用。

    #利用while循环模拟for循环对可迭代对象取值
    l1 = [11,22,33,44,55,66,77,88,99,111]
    obj = iter(l1)
    while 1:
        try:
            print(next(obj))
        except StopIteration:
            break
    
posted @ 2020-06-19 21:28  py菜鸟  阅读(48)  评论(0)    收藏  举报