一、迭代器
凡是可作用于for循环的对象都是Iterable(可迭代对象)类型;
凡是可作用于next()函数的对象都是Iterator(迭代器)类型,它们表示一个惰性计算的序列;
集合数据类型如list、dict、str等是Iterable(可迭代对象)但不是Iterator(迭代器),不过可以通过iter()函数获得一个Iterator(迭代器)对象。
可以直接作用于for循环的数据类型有以下几种:
一类是集合数据类型,如list、tuple、dict、set、str等;
一类是generator,包括生成器和带yield的generator function(生成器函数)
1、可迭代对象(Iterable):
可以直接作用于for循环的对象统称为可迭代对象(Iterable)。可以使用isinstance()判断一个对象是否是Iterable对象
2、迭代器(Iterator):
可以被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator),可以使用isinstance()判断一个对象是否是迭代器(Iterator)对象
判断可迭代对象
from collections.abc import Iterable
a=isinstance([],Iterable)
print(a)
b=isinstance('ABF', Iterable)
print(b)
c=isinstance(123,Iterable)
print(c)
d=isinstance((x for x in range(10)),Iterable)
print(d)
E:\Anaconda3\anaconda\python.exe F:/seven.py
True
True
False
True
Process finished with exit code 0
生成器都是迭代器(Iterator)对象,但list、dict、str虽然是可迭代对象,却不是迭代器(Iterator)。
把list、dict、str等迭代对象变成迭代器(Iterator)可以使用iter()函数:
from collections.abc import Iterator
a = isinstance(iter([]), Iterator)
print(a)
b = isinstance(iter('abc'), Iterator)
print(b)
E:\Anaconda3\anaconda\python.exe F:/seven.py
True
True
Process finished with exit code 0