前言
一开始只是想知道,iterable 与 iterator的区别
后面又拉出来 iter(), next()方法
然后还有魔法方法 _ _iter _ _(), _ _ getitem _ _()
真的是书到用时方恨少…
资料
- 流畅的Python
- Python 3 iter函数用法简述
- python中的Iterator和Iterable
- Python 中 Iterator和Iterable的区别
- python学习之Iterable和Iterator的区别
剧透
- 总结就是:
- 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 表示这个对象可迭代,如 list,dict,set Iterator 表示这个对象可生成,如 g = (x * x for x in range(10)), <generator object <genexpr> at 0x1022ef630> 意思就是 Iterable会把数据全部加载进内存(如果可以), Iterator则只加载某些数据,剩下的数据在使用的时候会通过计算得出 eg:打印1~100,[1,2,...,100] 一百个数据全部加载进内存才开始打印 range(1,101) 只加载1进内存,返回一个genrtator对象, 通过计算得出剩下的2,3,...,100