做(zuò)自(zì)由與創造的先行(xíng)者

Types: 5. Iterator Types

Python開(kāi)發手冊

5. Iterator Types

2.2版本中的新功能(néng)。

Python支持對容器進行(xíng)叠代的概念。這(zhè)是使用兩種不同的方法實現的; 這(zhè)些用于允許用戶定義的類支持叠代。下(xià)面更詳細地(dì)描述的序列總是支持叠代方法。

需要(yào)為(wèi)容器對象定義一(yī)個方法來提供叠代支持:

container.__iter__()

返回一(yī)個叠代器對象。該對象需要(yào)支持下(xià)面描述的叠代器協議(yì)。如(rú)果一(yī)個容器支持不同類型的叠代,可(kě)以提供額外(wài)的方法來專門為(wèi)這(zhè)些叠代類型請(qǐng)求叠代器。(支持多種形式叠代的對象的一(yī)個​​例子是支持廣度優先和(hé)深度優先遍曆的樹(shù)結構。)此方法對應tp_iter于Python / C API中Python對象的類型結構的槽。

叠代器對象本身需要(yào)支持以下(xià)兩種方法,它們一(yī)起構成叠代器協議(yì):

iterator.__iter__()

返回叠代器對象本身。這(zhè)是允許容器和(hé)叠代器與for和(hé)in語句一(yī)起使用所必需的。此方法對應tp_iter于Python / C API中Python對象的類型結構的插槽。

iterator.next()

從(cóng)容器中返回下(xià)一(yī)個項目。如(rú)果沒有其他(tā)項目,請(qǐng)舉例說明(míng)StopIteration。此方法對應tp_iternext于Python / C API中Python對象的類型結構的插槽。

Python定義了(le)幾個叠代器對象來支持對通(tōng)用和(hé)特定序列類型,字典以及其他(tā)更專用的形式的叠代。除了(le)叠代器協議(yì)的實現之外(wài),特定的類型并不重要(yào)。

該協議(yì)的意圖是,一(yī)旦叠代器的next()方法提出StopIteration,它将繼續在随後的調用中這(zhè)樣做(zuò)。不遵守這(zhè)一(yī)财産的實施被視(shì)為(wèi)破産。(這(zhè)個約束是在Python 2.3中添加的;在Python 2.2中,根據這(zhè)個規則破壞了(le)各種叠代器。)

5.1 生成器類型

Python的生成器提供了(le)一(yī)種實現叠代器協議(yì)的便捷方式。如(rú)果容器對象的__iter__()方法作(zuò)為(wèi)生成器實現,它将自(zì)動返回提供__iter__()和(hé)next()方法的叠代器對象(技術(shù)上(shàng)講,生成器對象)。有關生成器的更多信息可(kě)以在yield表達式的文檔中找到。

網站建設開(kāi)發|APP設計開(kāi)發|小程序建設開(kāi)發