python基础 24 专题 可迭代对象

172 阅读2分钟

辨析可迭代对象,迭代器,容器,生成器,序列

一 容器

container 
特点: 
    1. 可以存放多个数据 
    2. 可以存放多种数据 
    3. 支持in/not in操作 
    list,tuple,dict,set,str,frozenset q
    ueue(队列) pipe(管道) 
    defaultdict,ordereddict,namedtuple 
    容器是不存在的 
    

二 可迭代对象

iterable
1. 可迭代对象是不存在的 
2. 拥有迭代器的对象就是可迭代对象 

三 迭代器

iterator 
1. 本身就是一个可迭代对象 
2. iter(): 
    从可迭代对象中获取它的迭代器 
3. next(): 
    从迭代器中获取下一个元素 
    原理:游标最开始在迭代器第一个元素的前面,每次调用next() 游标向后挪动一个单位,并且将游标划过 的元素返回 
    如果游标已经在迭代器的最后一个元素之后,再调用next,抛出异常:StopIteration 
4. 任何实现了__next__() 方法和__iter__() 的对象都是迭代器 
next()函数的底层调用迭代器的__next__()方法 
iter()函数的底层调用迭代器的__iter__()方法 


# next() # 从迭代器中获取下一个元素 
# iter() # 从可迭代对象中获取它的迭代器 
l=[1,2,3,4] 
# a=iter(l) # a是列表的迭代器 
# print(next(a)) 
# print(next(a)) 
# print(next(a)) 
# print(next(a)) 
# print(next(a)) 
# a=l.__iter__() 
# print(a.__next__()) 
# print(a.__next__()) 
# print(a.__next__()) 
# print(a.__next__()) 
a=iter(l) 
# a2=iter(a) 
# print(a) 
# print(a2) 

for i in a: 
    print(i) 
 

四 生成器

generator 
创建形式: 
1. 生成式: 
    生成器推导式 
    (i for i in range(10)) 
2. 利用关键字:yield(生产) 
    函数中如果有yield关键字,该函数的调用就不再是函数的返回值,而返回的是一个生成器对象 
    函数本身不变 
3. 生成器是一个特殊的迭代器 
    支持next函数 
4. 生成器是一个可迭代对象 
    支持遍历 
    # a=(i for i in range(10)) 
    # print(next(a)) 
    # print(next(a)) 
    # print(next(a)) 
    # print(next(a)) 
    # print(next(a)) 
    # print(next(a)) 
    # print(next(a)) 
    # print(next(a)) 
    # print(next(a))
    # print(next(a)) 
    # print(next(a)) 
    # for i in a: 
        # print(i)
        
    def fun(): 
        a=0 
        while 1: 
            yield a 
            a+=1 
            
            if a==10: 
                raise StopIteration() 
    print(fun) 
    a=fun() 
    # print(next(a)) 
    
    for i in a: 
        print(i) 

五 序列

sequence 
是不存在的 
1. 支持下标操作 
2. 支持切片操作