摘要:迭代器一個表示數據流的對象。迭代器對象本身要求支持以下組成迭代器協議的兩個方法返回迭代器對象本身。這些特定類型處于迭代器協議實現之外的東西,并不重要。一旦一個迭代器的方法引發,在子序列調用中也必須這樣做。
迭代器(iterator)
一個表示數據流的對象。反復調用迭代器的__next__()方法(或給它傳遞內建函數(built-in function)next())來返回在該流中的后繼項。當沒有可用數據時,產生一個StopInteration異常。此時,迭代器對象被耗盡,之后再調用 __next__()方法只會再次產生StopInteration異常。迭代器要求包含一個__iter__()方法,用于返回迭代器對象本身,因此每一個迭代器也都是可迭代的,這可被用于大多數接受可迭代(對象)的場景。一個值得注意的例外是試圖多重迭代傳遞的代碼。一個容器對象(比如說list),每次給它傳遞iter()函數或使用for循環時,產生一個新的迭代器。在一個迭代器中如此嘗試,通過上一個迭代的傳遞,同樣會產生耗盡的迭代器對象,這使它看起來像是一個空容器。
來自:Glossary — Python 3.4.2 documentation中的 iterator 部分
迭代器類型(Iterator Types)Python支持一個容器之上的迭代的的概念。這由兩個截然不同的方法實現,它們被用于讓用戶定義的類(user-defined classes)支持迭代。序列(Sequences),總是支持迭代方法,下面會詳細描述。
在容器對象中需要定義一個方法來提供迭代支持:
container.__iter__()
返回一個迭代器對象。此對象要求能支持下面描述的迭代協議。如果一個容器支持不同類型的迭代,額外的方法可被提供,來為這些不同類型請求指定的迭代器。(一個對象支持多種形式的迭代的,就像樹結構支持廣度優先和深度優先遍歷一樣。)該方法對應于Python/C API中的Python對象的類型結構的tp_iter槽(slot)。
迭代器對象本身要求支持以下組成迭代器協議的兩個方法:
iterator.__iter__()
返回迭代器對象本身。這是必需的,以讓它可以在容器和迭代器中使用for語句和in語句。該方法對應于Python/C API中的Python對象的類型結構的tp_iter槽。
iterator.__next__()
從容器中返回下一項。如果沒有,引發StopIteration異常。該方法對應于Python/C API中的Python對象的類型結構的tp_iternext槽。
Python定義了多種迭代器對象來支持在通用的和特定的序列類型、字典和其他特定的形式之上的迭代。這些特定類型處于迭代器協議實現之外的東西,并不重要。
一旦一個迭代器的__next__()方法引發StopIteration,在子序列調用中也必須這樣做。不遵守這個屬性的實現被認為是失效的。
來自:4. Built-in Types — Python 3.4.2 documentation中的 Iterator Types 部分
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/45334.html
摘要:抓住了迭代器模式的本質,即是迭代,賦予了它極高的地位。輸出結果輸出結果小結迭代器模式幾乎是種設計模式中最常用的設計模式,本文主要介紹了是如何運用迭代器模式,并介紹了模塊生成迭代器的種方法,以及種生成迭代器的內置方法。 showImg(https://segmentfault.com/img/bVbmv7W?w=4272&h=2848); 在軟件開發領域中,人們經常會用到這一個概念——設...
摘要:抓住了迭代器模式的本質,即是迭代,賦予了它極高的地位。輸出結果輸出結果小結迭代器模式幾乎是種設計模式中最常用的設計模式,本文主要介紹了是如何運用迭代器模式,并介紹了模塊生成迭代器的種方法,以及種生成迭代器的內置方法。 showImg(https://segmentfault.com/img/bVbmv7W?w=4272&h=2848); 在軟件開發領域中,人們經常會用到這一個概念——設...
摘要:本文重點掌握可迭代的對象的定義掌握可迭代對象迭代器與生成器之間的關系和異同熟悉標準庫中生成器。二迭代器迭代器介紹迭代器用于從集合中取出元素的對象。若想再次迭代須重建迭代器。迭代器檢查方式調用,。區別可迭代的對象不是迭代器。 導語:本文章記錄了本人在學習Python基礎之控制流程篇的重點知識及個人心得,打算入門Python的朋友們可以來一起學習并交流。 本文重點: 1、掌握可迭代的對象的...
閱讀 775·2023-04-25 16:55
閱讀 2804·2021-10-11 10:59
閱讀 2070·2021-09-09 11:38
閱讀 1782·2021-09-03 10:40
閱讀 1485·2019-08-30 15:52
閱讀 1125·2019-08-30 15:52
閱讀 954·2019-08-29 15:33
閱讀 3494·2019-08-29 11:26