1可迭代协议:含有__iter__()方法就可迭代,只要可迭代就可以for循环
除了list,dict,str,set,tuple,range(),enumerate,file等都是
2迭代器协议:含有__iter__()和__next__()的就是迭代器。
isinstance([],Iterable) Out[3]: True isinstance([],Iterator) Out[4]: False
bb = dir([].__iter__()) aa = dir([]) set(bb) - set(aa) Out[20]: {'__length_hint__', '__next__', '__setstate__'}
3所以可迭代的不一定是迭代器,要看他有没有__next__()方法。可迭代的调用__iter__()方法就可以得到一个迭代器。
4迭代器的next()方法可以一个一个获取值。for循环其实就是在使用迭代器。