1. 程式人生 > >python基礎-叠代器

python基礎-叠代器

類型 image ngs print 包含 文件 16px png font

    1.什麽是叠代器:

      叠代:是一個重復的過程,每一次重復即是一次叠代,並且每次叠代的結果都是下一次叠代的初始值。

    2.為什麽要有叠代器?

      對於序列類型:字符串、列表、元組,我們可以使用索引的方式叠代取出其包含的元素。但對於字典、集合、文件等類型是沒有索引的,若還想取出其內部包含的元素,則必須找出一種不依賴於索引的叠代方式,這就是叠代器.

    

    3.什麽是可叠代對象?

      可叠代對象指的是內置有__iter__方法對象,即obj.__iter__,如下

      技術分享圖片

     4.什麽是叠代器對象?

      可叠代對象執行__iter__()得到的結果就是叠代器對象

      而叠代器對象指的是既有 __iter__()又有內置__next()方法的對象 

      文件類型是叠代器對象:

       技術分享圖片

      

      字符串,列表,元祖,字典,集合都是可叠代對象,但不是叠代器對象

      文件對象既是可叠代對象,又是叠代器對象

     5.叠代器對象的使用

       字符串,列表,元祖,字典,集合等可叠代對象通過__iter__()得到叠代器對象

       技術分享圖片

       叠代器對象通過__iter__()得到仍是叠代器對象本身

       技術分享圖片

       __next__()取值不依賴索引

       技術分享圖片

      

      next()函數和__next__的區別:

        next()和__next__都是可以獲得下一個值:

        技術分享圖片

        PS:Python 3 中的 文件 對象不支持 next() 方法。 Python 3 的內置函數 next() 通過叠代器調用 __next__() 方法返回下一項。 在循環中,next()方法會在每次循環中調用,該方法返回文件的下一行,如果到達結尾(EOF),則觸發 StopIteration

      

       ps:for循環取值的工作原理:

        dic = {‘name‘: ‘zhangsan‘, ‘age‘: 12}

        for key in dic:

          print(dic(key))

        1.執行in後對象的dic.__iter__()方法,得到叠代器對象iter_dic

        2.執行next(iter_dic).將得到的值賦值給key,然後執行循環體代碼

        3.重復過程2,直到捕捉異常StopIteration,結束循環

 

        for。。in的工作原理:

        技術分享圖片

        

       叠代器的優缺點:

        優點:提供一種統一的、不依賴於索引的叠代方法

           惰性計算,節省內存

        確定:

           無法直接獲得長度大小,只有在next完畢後才知道

           一次性的,只能往後走,並不能往前退、

python基礎-叠代器