1. 程式人生 > >python基礎之迭代器

python基礎之迭代器

迭代器

  1. 概述

    迭代器是訪問集合元素的一種方式。迭代器物件從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。

  2. 可迭代物件

    迭代器提供了一個統一的訪問集合的介面。只要是實現了__iter__()或 getitem()方法的物件,就可以使用迭代器進行訪問。

    序列:字串、列表、元組

    非序列:字典、檔案

    自定義類:使用者自定義的類實現了__iter__()或__getitem__()方法的物件

  3. 迭代基礎

        f1=open('data.txt')
    
        # for line in f1.readlines(): #把所有行讀入記憶體,遇到大檔案效率差
        #     print(line)
        
        # for line in f1:
        #     print(line)
        
        # 檔案物件就是自己的迭代器
        
        print(f1.__next__())
        print(f1.__next__())
        
        # 為了手動支援迭代,python3.0提供了一個next()方法,他會自動呼叫物件的_next_()
        
        print(next(f1))
    
  4. iter() 和 next()

    陣列本身沒有迭代物件

        arr=[1,2,3,4]
        E=iter(arr)
        # print(E.__next__())
        # print(next(E))
        
        while True:
            try:
                X=E.__next__()
            except StopIteration:
                break
            print(X) 
    

    字典物件有一個迭代器,每次返回字典的key

        params={'name':'tom','age':12}
        for key in params:
            ...
        #所以不要下面的寫法
        for key in params.keys():
            ...
        
    
  5. range()

    range()支援多個迭代器,而其他內建函式不支援

        arr=list(range(20))
        print(arr)
        
        R=iter(range(100))
        
        print(next(R))
        print(next(R))
        print(next(R))
        
        
    
  6. map() zip() filter() 和range()不同,以上三個函式都是自己的迭代器

        M=map(abs,[2,-3,-1,3])
        print(next(M))