欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python設計模式之迭代器模式原理與用法實例分析

 更新時間:2019年01月10日 11:59:20   作者:Andy  
這篇文章主要介紹了Python設計模式之迭代器模式原理與用法,結合具體實例形式分析了迭代器模式的概念、原理、定義及使用方法,代碼注釋說明簡單易懂,需要的朋友可以參考下

本文實例講述了Python設計模式之迭代器模式原理與用法。分享給大家供大家參考,具體如下:

迭代器模式(Iterator Pattern):提供方法順序訪問一個聚合對象中各元素,而又不暴露該對象的內部表示.

下面是一個迭代器模式的demo:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大話設計模式
設計模式——迭代器模式
迭代器模式(Iterator Pattern):提供方法順序訪問一個聚合對象中各元素,而又不暴露該對象的內部表示.
"""
#迭代器抽象類
class Iterator(object):
  def First(self):
    pass
  def Next(self):
    pass
  def Isdone(self):
    pass
  def CurrItem(self):
    pass
#聚集抽象類
class Aggregate(object):
  def CreateIterator(self):
    pass
#具體迭代器類
class ConcreteIterator(Iterator):
  def __init__(self, aggregate):
    self.aggregate = aggregate
    self.curr = 0
  def First(self):
    return self.aggregate[0]
  def Next(self):
    ret = None
    self.curr += 1
    if self.curr < len(self.aggregate):
      ret = self.aggregate[self.curr]
    return ret
  def Isdone(self):
    return True if self.curr+1 >= len(self.aggregate) else False
  def CurrItem(self):
    return self.aggregate[self.curr]
#具體聚集類
class ConcreteAggregate(Aggregate):
  def __init__(self):
    self.ilist = []
  def CreateIterator(self):
    return ConcreteIterator(self)
class ConcreteIteratorDesc(Iterator):
  def __init__(self, aggregate):
    self.aggregate = aggregate
    self.curr = len(aggregate)-1
  def First(self):
    return self.aggregate[-1]
  def Next(self):
    ret = None
    self.curr -= 1
    if self.curr >= 0:
      ret = self.aggregate[self.curr]
    return ret
  def Isdone(self):
    return True if self.curr-1<0 else False
  def CurrItem(self):
    return self.aggregate[self.curr]
if __name__=="__main__":
  ca = ConcreteAggregate()
  ca.ilist.append("大鳥")
  ca.ilist.append("小菜")
  ca.ilist.append("老外")
  ca.ilist.append("小偷")
  itor = ConcreteIterator(ca.ilist)
  print itor.First()
  while not itor.Isdone():
    print itor.Next()
  print "————倒序————"
  itordesc = ConcreteIteratorDesc(ca.ilist)
  print itordesc.First()
  while not itordesc.Isdone():
    print itordesc.Next()

運行結果:

上面類的設計如下圖:

當需要對聚集有多種方式遍歷時,可以考慮使用迭代器模式

迭代器模式分離了集合的遍歷行為,抽象出一個迭代器類來負責,這樣既可以做到不暴露集合內部結構,又可以讓外部代碼透明的訪問集合內部的數據

更多關于Python相關內容可查看本站專題:《Python數據結構與算法教程》、《Python Socket編程技巧總結》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》及《Python入門與進階經典教程

希望本文所述對大家Python程序設計有所幫助。

相關文章

  • python 讀取視頻,處理后,實時計算幀數fps的方法

    python 讀取視頻,處理后,實時計算幀數fps的方法

    今天小編就為大家分享一篇python 讀取視頻,處理后,實時計算幀數fps的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Python??Pandas教程之使用?pandas.read_csv()?讀取?csv

    Python??Pandas教程之使用?pandas.read_csv()?讀取?csv

    這篇文章主要介紹了Python Pandas教程之使用pandas.read_csv()讀取csv,文章通過圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • Python實現監(jiān)控屏幕界面內容變化并發(fā)送通知

    Python實現監(jiān)控屏幕界面內容變化并發(fā)送通知

    這篇文章主要為大家詳細介紹了如何利用Python實現實時監(jiān)控屏幕上的信息是否發(fā)生變化并發(fā)送通知,文中的示例代碼講解詳細,感興趣的可以了解一下
    2023-04-04
  • (手寫)PCA原理及其Python實現圖文詳解

    (手寫)PCA原理及其Python實現圖文詳解

    這篇文章主要介紹了Python來PCA算法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望能給你帶來幫助
    2021-08-08
  • python實現簡單五子棋游戲

    python實現簡單五子棋游戲

    這篇文章主要為大家詳細介紹了python實現簡單五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • 使用python-pptx創(chuàng)建PPT演示文檔功能實踐

    使用python-pptx創(chuàng)建PPT演示文檔功能實踐

    這篇文章主要介紹了使用python-pptx創(chuàng)建PPT演示文檔功能實踐,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 解析Python中的生成器及其與迭代器的差異

    解析Python中的生成器及其與迭代器的差異

    生成器是一種特殊的迭代器,而反過來說則就不對了,迭代器在Python中是一個更抽象的概念,以下我們就來詳細解析Python中的生成器及其與迭代器的差異
    2016-06-06
  • Python中parsel兩種獲取數據方式小結

    Python中parsel兩種獲取數據方式小結

    本文主要介紹了Python中parsel兩種獲取數據方式小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • 深入剖析Python的爬蟲框架Scrapy的結構與運作流程

    深入剖析Python的爬蟲框架Scrapy的結構與運作流程

    這篇文章主要介紹了Python的爬蟲框架Scrapy的結構與運作流程,并以一個實際的項目來講解Scrapy的原理機制,十分推薦!需要的朋友可以參考下
    2016-01-01
  • Python+wxPython實現合并多個文本文件

    Python+wxPython實現合并多個文本文件

    在?Python?編程中,我們經常需有時候,我們可能需要將多個文本文件合并成一個文件,要處理文本文件,本文就來介紹下如何使用?wxPython?模塊編寫一個簡單的程序,能夠讓用戶選擇多個文本文件,感興趣的可以了解下
    2023-08-08

最新評論