五、函数_12.迭代器

迭代器

可迭代的:适合作为函数或结构体的参数,这些函数和结构体期望在迭代结束之前可以从中获取连续的元素

能用next()调用的可迭代对象(Iterable)被称为迭代器对象(Iterator)
迭代器是一种访问集合元素的方式
迭代器可以记录访问的位置
迭代器访问可迭代对象时,从第一个元素开始逐一访问,直至所有元素都被访问完毕,不能倒退
迭代器一定是可迭代对象,可迭代对象不一定是迭代器

iter(),
        功能:把一个可迭代对象转为迭代器对象
        参数:可迭代对象(str,list,tuple,dict,set,range)
        返回值:迭代器

next(iterator),
        功能:调用iterator,并逐一返回iterator中的数据;只有iterator能被next()调用
        参数:iterator
        返回值:iterator中的元素

isinstance(),
        功能:判断参数是否是指定的类型

迭代器的取值方式
    1.next()    使用next()调用迭代器,从第一个数据开始逐一取出
    2.list()    使用list()把迭代器转为list,一次性取出所有数据
    3.for       使用for循环遍历迭代器
    
无论使用何种方式取值,迭代器中的数据都是取一次少一个,直至数据被取完
可迭代对象
varlist = [10,11,'M','R']
print(varlist)

for p in varlist :
    print(p)

for n in range(1) :    # range() 返回一个可迭代对象
    print(n)

[10, 11, 'M', 'R']
10
11
M
R
0
迭代器对象
vardict = {'N':'11','S':'9','M':'10','I':'8','X':'6'}
A = iter(vardict)
print(A,type(A))

<dict_keyiterator object at 0x000000FC14720EF8> <class 'dict_keyiterator'>
next()取值
print(next(A))
print(next(A))
print(next(A))

N
S
M
for取值
I
X
list()取值
l = list(A)
print(l)

[]
迭代器和可迭代对象的检测方法

只有迭代器可以被next()调用,所以可以使用next()来检测迭代器
next(vartuple) 'tuple' object is not an iterator

from collections.abc import Iterator,Iterable
vartuple = ('M',10)
t = iter(vartuple)

i1 = isinstance(vartuple,Iterable)
i2 = isinstance(vartuple,Iterator)
print(i1,i2)

i3 = isinstance(t,Iterable)
i4 = isinstance(t,Iterator)
print(i3,i4)

True False
True True
上一篇:集合的遍历的三种方式


下一篇:迭代器