一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python設計模式編程中解釋器模式的簡單程序示例分享

Python設計模式編程中解釋器模式的簡單程序示例分享

2020-08-15 11:51ponder008 Python

這篇文章主要介紹了Python設計模式編程中解釋器模式的簡單程序示例分享,解釋器模式強調用抽象類來表達程序中將要實現的功能,需要的朋友可以參考下

模式特點:給定一個語言,定義它的文法的一種表示,并定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。

我們來看一下下面這樣的程序結構:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Context:
  def __init__(self):
    self.input=""
    self.output=""
 
class AbstractExpression:
  def Interpret(self,context):
    pass
 
class 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)

那么它所體現出的類圖是這樣的:

Python設計模式編程中解釋器模式的簡單程序示例分享

 

再來看一個例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#encoding=utf-8
#
#by panda
 
def printInfo(info):
  print unicode(info, 'utf-8').encode('gbk'),
 
#上下文類:演奏內容
class PlayContext():
  text = None
  PlayText = None
 
#抽象表達式類
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(' ') #找出第一個空格出現的位置
      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設計模式編程中解釋器模式的簡單程序示例分享

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品日韩欧美一区二区 | 日本艳鉧动漫1~6在线观看 | 亚洲 日本 中文字幕 制服 | 精品日产1区2卡三卡麻豆 | chinesehdxxx吃奶水 | 亚洲精品综合 | 精品久久一 | 免费看欧美一级特黄a大片一 | jzzjlzz亚洲乱熟在线播放 | 色播开心网 | 好看华人华人经典play | 日本网络视频www色高清免费 | 亚洲天堂视频在线免费观看 | 五花大绑esebdsm国产 | 亚洲区一| 2019天天干天天操 | 午夜免费无码福利视频麻豆 | 亚洲品质自拍网站 | 免费观看韩剧网站在线观看 | 国产精品午夜性视频网站 | 免费一级片在线观看 | 亚洲国产欧美在线成人aaaa | 亚洲国产三级在线观看 | 欧美日韩中文字幕在线视频 | 欧美色成人tv在线播放 | 亚洲热影院 | 国产馆精品推荐在线观看 | 亚洲福利天堂 | 久久视热频国产这里只有精品23 | 欧美特黄视频在线观看 | 91精品国产综合久久香蕉 | 久久精品国产在热亚洲完整版 | 先锋资源久久 | 公园吃女人奶野战视频 | 国产成人精品高清不卡在线 | 岛国虐乳紧缚媚药调教 | 国产欧美精品专区一区二区 | 男男playh片在线观看 | 午夜神器18以下不能进免费 | 99久久999久久久综合精品涩 | 99只有精品|