for循环的数据类型:
1.集合数据类型,如list列表,tuple元组,dict字典,set集合,str字符串等;
2.generator生成器,包括生成器和带yield的generator function;
如何判断一个对象是不是Interable?
可用于for循环的对象,成为可迭代对象Iterable;第二种验证方法:isinstance函数
>>> from collections import Iterable
>>> isinstance([],Iterable)
True
>>> isinstance({},Iterable)
True
>>> isinstance((),Iterable)
True
>>> isinstance('abc',Iterable)
True
>>> isinstance((x for i in range(10)),Iterable)
True
>>> isinstance((lambda x:x**x),Iterable)
False
>>> isinstance(100,Iterable)
False
迭代器Iterator:可以被__next()__函数调用并不断返回下一值的对象成为迭代器。
判断是否为迭代器,就看有没有__next__方法!
>>> a = [1,2,3]
>>> a.__next__()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute '__next__'
总结:可迭代对象Iterable一定是Iterator迭代器,但list、dict和str除外。它们虽然是可迭代对象Interable,但不是迭代器Interator。
把list、dict和str由可迭代对象Iterable变成一个迭代器Iterator,使用iter()函数:
>>> a = [1,2,3]
>>> b = iter(a)
>>> b.__next__()
1
>>> b.__next__()
2
原因:Iterator可以表示无限大的数据流或自然数,而list却不能。