Python學習進階教程(10)—同步迭代器的使用

(本號正在連續推出以Python官網文檔為主線的完整的系統的學習Python的系列文章和視頻,感興趣的朋友們歡迎搜索關注。本文及後續文章如無特別聲明均以Windows平臺作為演示平臺,Python版本為:3.8.1)


注意:開始學習“Python學習進階教程”系列內容前須已經學習過“Python學習入門教程”系列內容】


Python支持在容器上進行迭代。這是通過方法__iter__()和__next__()來實現的。在"Python學習入門教程"中介紹過的序列類型始終支持迭代方法。

具體實現方法如下

提供迭代支持的容器對象需要定義一個方法__iter__():

container.__iter__()

該方法返回一個迭代器協議對象。如果容器支持不同類型的迭代,則需要提供額外的方法來為這些迭代類型提供專門的迭代器。(支持多種形式的迭代的對象的一個例子是同時支持廣度優先和深度優先遍歷的樹結構。)

這個方法對應於Python/C API中Python對象的類型結構的tp_iter。

迭代器對象本身需要支持以下兩種方法,這兩種方法共同構成了迭代器協議:

iterator.__iter__()

該方法返回迭代器對象本身。這是容器和迭代器與for和in語句一起使用所必需的。

這個方法對應於Python/C API中Python對象的類型結構的tp_iter。

iterator.__next__ ()

該方法從容器中返回下一項。如果沒有其他項,則引發StopIteration異常。這個方法對應於Python/C API中Python對象的類型結構的tp_iternext。

Python定義了幾個迭代器對象,以支持在序列類型、字典和其他特定形式上進行迭代。這些特定類型重要之處是實現了迭代器協議。

一旦迭代器的__next__()方法引發StopIteration,就必須在隨後的調用中繼續這樣做。不遵守此規則的實現將被視為破壞行為。


需要說明的是,Python的生成器提供了一種方便的方法來實現迭代器協議。如果容器對象的__iter__()方法是作為生成器實現的,那麼它將自動返回一個提供了_iter__()和_next__()方法的迭代器對象(從技術上講,是一個生成器對象)。關於生成器的內容參閱 。


【結束】

篇尾寄語:萬丈高樓平地起,是否具有紮實的基礎決定一個人能否走遠以及能走多遠。Python的學習也是同樣的道理!


分享到:


相關文章: