做自(zì)由與創造的先行者

Types: 5. Iterator Types

Python開(kāi)發手冊

5. Iterator Types

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

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

需要爲容器對(duì)象定義一個方法來(lái)提供叠代支持:

container.__iter__()

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

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

iterator.__iter__()

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

iterator.next()

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

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

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

5.1 生成器類型

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

網站(zhàn)建設開(kāi)發|APP設計(jì)開(kāi)發|小(xiǎo)程序建設開(kāi)發
下(xià)一篇:Types: 6. Sequence Types — str, unicode, list, tuple, bytear
上(shàng)一篇:Types: 4. Numeric Types — int, float, long, complex