迭代器包含有next方法的实现,在正确的范围内返回期待的数据以及长处范围后能够抛出StopIteration的错误停止迭代
a.定义
集合(list,tuple,dict,str等),还有生成器(generator),当然也包括带yield的生成器函数(generator function)。这些可以直接作用于for循环的对象统称为可迭代对象(Iterable)
b.如何判断可迭代对象(Iterable)
isinstance()语法:
isinstance(object,classinfo)
参数:
object——实例对象
classinfo——可以是直接或间接类名、基本类型或者由它们组成的元组
返回值:
如果对象的类型于参数二的类型(classinfo)相同则返回True,否则返回False
实例:
a = 2
print(isinstance(a,int))
# 打印结果 True
print(isinstance(a,str))
# 打印结果False
print(isinstance(a,(str,int,list)))
# 打印结果True 是元组中的一个返回True
可以使用isinstance()判断一个对象是否为可Iterable对象
from collections import Iterable
print(isinstance([],Iterable))
# True 集合是可迭代对象
print(isinstance({},Iterable))
# True 字典是可迭代对象
print(isinstance('abc',Iterable))
# True 字符串是可迭代对象
print(isinstance((x for x in range(10)),Iterable))
#True 生成器是可迭代对象
print(isinstance(100,Iterable))
# False 整数型不是可迭代对象
a.定义
可以被next()
函数调用并不断返回下一个值得对象称为迭代器(Iterator)
b.如何判断一个对象是否是迭代器对象?
同样是使用isinstance()判断
from collections import Iterator
print(isinstance((x for x in range(10)),Iterator))
# 输出结果:True
print(isinstance([],Iterator))
# False
print(isinstance({},Iterator))
# False
print(isinstance('abc',Iterator))
# False
生成器都是迭代器(Iterator)对象,但集合(list),字典(dict)还有字符串(str)虽然是可迭代对象(Iterable),却不是迭代器(Iterator)
如果想让集合,字典,字符串等可迭代对象变成迭代器,可以使用iter()函数
list = [1,2,3]
print(next(list))
# 输出结果:TypeError: 'list' object is not an iterator
list = [1,2,3]
L = iter(list)
print(next(L))
# 输出结果:1
a.凡是可作用于for循环的对象都是可迭代对象(Iterable)类型
b.凡是可作用于next()函数的对象都是迭代器(Iterator)类型,它们表示一个惰性计算的序列
#惰性计算:只有在需要返回下一个数据时才会计算
c.集合数据类型如list、dict、str等是可迭代对象(Iterable)但是不是迭代器(Iterator),不过可以通过iter()函数获得一个迭代器对象