python学习笔记:Iterable 与 Iterator

前言

一开始只是想知道,iterable 与 iterator的区别
后面又拉出来 iter(), next()方法
然后还有魔法方法 _ _iter _ _(), _ _ getitem _ _()
真的是书到用时方恨少…

资料

剧透

  • 总结就是:
    • Iterable需要将数据全部加载进内存才开始下一步操作
    • Iterator可以只加载一部分数据就开始操作,需要的时候再继续加载剩下的数据

正文

字面意思,Iterable表示可迭代,Iterator表示迭代器
可迭代就是可以使用for循环,而且显然,迭代器肯定是可迭代的,
但可迭代的就不一定是迭代器

  • 所以关键就是,什么是迭代器(Iterator)

    # 首先证实一下 list 不是迭代器
    >>>from collections import Iterator
    >>> isinstance([1,2,3], Iterator)
    False
    
  • 接下来,对Iterator换个名可能就好区分很多了

    "在python社区中,大多数时候把迭代器和生成器视作一个概念" -- 《流畅的Python》p330
    
  • 也就是说,这里的Iterator(迭代器)其实就是指 generator(生成器)

  • => Iterable 与 generator ,差异性立马显示出来了

    Iterable 表示这个对象可迭代,如 listdictset
    
    Iterator 表示这个对象可生成,如 g = (x * x for x in range(10)),
    <generator object <genexpr> at 0x1022ef630>
    
    意思就是 Iterable会把数据全部加载进内存(如果可以),
    Iterator则只加载某些数据,剩下的数据在使用的时候会通过计算得出
    eg:打印1100[1,2,...,100] 一百个数据全部加载进内存才开始打印
    range(1,101) 只加载1进内存,返回一个genrtator对象,
    通过计算得出剩下的23,...,100	
    

猜你喜欢

转载自blog.csdn.net/chen_holy/article/details/90042471
今日推荐