国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

Python設(shè)計(jì)模式編程中解釋器模式的簡(jiǎn)單程序示例分享

2020-01-04 17:40:28
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要介紹了Python設(shè)計(jì)模式編程中解釋器模式的簡(jiǎn)單程序示例分享,解釋器模式強(qiáng)調(diào)用抽象類來(lái)表達(dá)程序中將要實(shí)現(xiàn)的功能,需要的朋友可以參考下
 

模式特點(diǎn):給定一個(gè)語(yǔ)言,定義它的文法的一種表示,并定義一個(gè)解釋器,這個(gè)解釋器使用該表示來(lái)解釋語(yǔ)言中的句子。

我們來(lái)看一下下面這樣的程序結(jié)構(gòu):

class Context:  def __init__(self):    self.input=""    self.output=""class AbstractExpression:  def Interpret(self,context):    passclass Expression(AbstractExpression):  def Interpret(self,context):    print "terminal interpret"class NonterminalExpression(AbstractExpression):  def Interpret(self,context):    print "Nonterminal interpret"if __name__ == "__main__":  context= ""  c = []  c = c + [Expression()]  c = c + [NonterminalExpression()]  c = c + [Expression()]  c = c + [Expression()]  for a in c:    a.Interpret(context)

那么它所體現(xiàn)出的類圖是這樣的:

Python設(shè)計(jì)模式編程中解釋器模式的簡(jiǎn)單程序示例分享

 

再來(lái)看一個(gè)例子:

#encoding=utf-8 # #by panda #解釋器模式  def printInfo(info):   print unicode(info, 'utf-8').encode('gbk'),  #上下文類:演奏內(nèi)容 class PlayContext():   text = None   PlayText = None  #抽象表達(dá)式類 class Expression():   def Interpret(self, context):     if len(context.PlayText) == 0:       return     else:       playKey = context.PlayText[0:1]       context.PlayText = context.PlayText[2:]       tmp = context.PlayText.index(' ') #找出第一個(gè)空格出現(xiàn)的位置       playValue = context.PlayText[0:tmp]       context.PlayText = context.PlayText[tmp+1:]       self.Excute(playKey,playValue)      def Excute(self,playKey,playValue):     pass  #音高 class Pitch(Expression):   pitch = None   def Excute(self, key, value):     value = int(value)     if value == 1:       self.pitch = '低音'     elif value == 2:       self.pitch = '中音'     elif value == 3:       self.pitch = '高音'     printInfo(self.pitch)      #音符 class Note(Expression):   Notes = {   'C':1,     'D':2,   'E':3,     'F':4,     'G':5,     'A':6,     'B':7,     }   note = None   def Excute(self, key, value):        self.note = self.Notes[key]     printInfo('%d' % self.note)   def clientUI():   context = PlayContext()   context.PlayText = "O 2 E 0.5 G 0.5 A 3 E 0.5 G 0.5 D 3 E 0.5 G 0.5 A 0.5 O 3 C 1 O 2 A 0.5 G 1 C 0.5 E 0.5 D 3 "   expression = None;   while(len(context.PlayText) > 0):     str = context.PlayText[0:1];     if(str == 'O'):       expression = Pitch()     elif(str == 'C' or str == 'D' or str == 'E' or str == 'F' or str == 'G' or str == 'A' or str == 'B' or str == 'P'):       expression = Note()     expression.Interpret(context)          return  if __name__ == '__main__':   clientUI(); 


類圖:

Python設(shè)計(jì)模式編程中解釋器模式的簡(jiǎn)單程序示例分享

 
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 正安县| 延庆县| 汉源县| 体育| 从江县| 楚雄市| 绿春县| 海城市| 肇源县| 乌兰察布市| 伊宁市| 绥中县| 陇南市| 南丹县| 巩义市| 长顺县| 望江县| 镇原县| 台前县| 临夏县| 探索| 大兴区| 中超| 公主岭市| 泸水县| 平乡县| 萨迦县| 寻乌县| 嫩江县| 玛沁县| 平江县| 南陵县| 马公市| 德安县| 安塞县| 信阳市| 桐城市| 微山县| 沂源县| 祁连县| 金坛市|