激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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設計模式編程中解釋器模式的簡單程序示例分享

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 姑娘第四集免费看视频 | 午夜丰满少妇高清毛片1000部 | 密室逃脱第一季免费观看完整在线 | av电影网站在线观看 | 久久久国产一级片 | 99热久草| 亚洲欧美在线视频免费 | 成人国产在线看 | 久久最新网址 | 色婷婷久久久亚洲一区二区三区 | 7777网站| 久久久久久久.comav | 欧美精选一区二区 | 性生活视频一级 | 久久精品亚洲一区二区 | 免费网址黄 | 91精品国产九九九久久久亚洲 | 精品一区二区三区在线视频 | 亚洲成人精品久久久 | 欧美一区黄 | 久久视频精品 | 一本免费视频 | 成人黄色小视频在线观看 | 99久久精品免费 | 亚洲午夜精选 | 成人午夜在线免费观看 | 最新日韩精品在线观看 | 91系列在线观看 | 欧美激情首页 | 日韩在线毛片 | 日本在线视频免费观看 | 成年人在线免费播放视频 | 亚洲第五色综合网 | 久久精品国产精品亚洲 | 天天舔夜夜操 | va视频在线 | 大胆在线日本aⅴ免费视频 永久免费毛片 | 久久久久国产成人免费精品免费 | 九九精品视频观看 | 18欧美性xxxx极品hd | 中文字幕观看 |