您好,登錄后才能下訂單哦!
本篇內容介紹了“Python怎么實現外部迭代器”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
效果
迭代器簡化了聚合的接口
一般來講,聚合類內部實現的不同或多或少都會影響到聚合類的接口,訪問其子元素的接口也是如此。由于設計者經驗和能力的限制,經常需要增加接口或修改接口。使用迭代器模式之后,聚合類只需要提供取得迭代器的接口,接下來訪問聚合類的子元素的操作都可以通過迭代器來進行,而不需要另外準備其他的訪問子元素接口。另外由于迭代器接口已經經過了長時間各種情況的考驗,已被證明可以滿足大多數情況的需求,啥意思啊基本上不再需要聚合類增加其他的訪問方式。
支持在一個聚合上同時發生多個遍歷操作
迭代器本身可以保存迭代的狀態,一個自然的結果就是,可以同時對一個內聚類進行多個遍歷。這一點在進行某些操作(例如排序)的時候非常有用。
支持以不同的方式遍歷聚合
由于迭代器的實現已經獨立于聚合類,只要替換迭代器就可以實現不同方式的遍歷。
實現
外部迭代還是內部迭代
外部迭代是指由利用者控制迭代的動作,而內部迭代指的是由用戶向迭代器提交操作時由迭代器自動執行迭代動作。接下來通過偽代碼來說明這兩種迭代器的區別。首先是外部迭代器:
Iterator it = Aggregate.CreateInterator();
while(!it.isDone())
{
it.CurrentItem()->dosomething();
it.next();
}
迭代的動作也就是next的調用由利用者控制。
Iterator it = Aggregate.CreateInterator();
while(!it.isDone())
{
it.CurrentItem()->dosomething();
}
而內部迭代器,則會在用戶向迭代器提交操作的時候,自動進行迭代動作。這種方式很方便,但是方便的另一面就是不夠靈活,更不要說這種方便的好處很有限。因此大部分情況下,使用外部迭代器就好。
誰來實現迭代動作
這里有幾個選擇。一個是由迭代器來實現,這種情況下需要迭代器了解聚合類的內部結構,一定程度上破壞了封裝性。另一個選擇是由聚合類實現迭代動作,而迭代器只負責保存迭代的當前位置,這種方式的迭代器也被稱為游標。這種方式也有一個問題那就是不夠靈活,增加或者調整迭代算法都需要對聚合類進行修改。在實際的開發中,也可以使用第三種方法:聚合類提供基本的迭代功能,然后由另外的迭代器提供附加的功能。這些功能通常是對子元素的篩選。
是否需要空迭代器
空迭代器的IsDone方法總是返回true。它的作用是當聚合類沒有下級節點的時候返回,這樣使用迭代器的代碼可以使用同樣的邏輯處理下級節點而不需要判斷聚合類是否返回迭代器。這樣代碼看起來更簡潔。
是否需要健壯的迭代器
目前大部分迭代器都不支持在迭代的同時增加和刪除元素。如果程序員真這么做了,一般的結果就是發生錯誤。實現這種所謂健壯的迭代器非常困難,所以通常的做法是將處理分為兩步:先迭代檢索操作對象,然后再另行操作。這種方式更容易實現。
“Python怎么實現外部迭代器”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。