Python设计模式编程中解释器模式的简单程序示例分享


Posted in Python onMarch 02, 2016

模式特点:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

我们来看一下下面这样的程序结构:

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设计模式编程中解释器模式的简单程序示例分享

再来看一个例子:

#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设计模式编程中解释器模式的简单程序示例分享

Python 相关文章推荐
python多线程threading.Lock锁用法实例
Nov 01 Python
浅析python中SQLAlchemy排序的一个坑
Feb 24 Python
python 读取摄像头数据并保存的实例
Aug 03 Python
Python Learning 列表的更多操作及示例代码
Aug 22 Python
python自动化生成IOS的图标
Nov 13 Python
简单了解python gevent 协程使用及作用
Jul 22 Python
使用PYTHON解析Wireshark的PCAP文件方法
Jul 23 Python
wxPython实现画图板
Aug 27 Python
Python解析json代码实例解析
Nov 25 Python
python脚本和网页有何区别
Jul 02 Python
python selenium xpath定位操作
Sep 01 Python
pytorch 中forward 的用法与解释说明
Feb 26 Python
分析Python中设计模式之Decorator装饰器模式的要点
Mar 02 #Python
实例解析Python设计模式编程之桥接模式的运用
Mar 02 #Python
Python随机生成带特殊字符的密码
Mar 02 #Python
Python设计模式编程中Adapter适配器模式的使用实例
Mar 02 #Python
Python打造出适合自己的定制化Eclipse IDE
Mar 02 #Python
设计模式中的原型模式在Python程序中的应用示例
Mar 02 #Python
深入解析Python设计模式编程中建造者模式的使用
Mar 02 #Python
You might like
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
wamp安装后自定义配置的方法
2014/08/23 PHP
PHP date函数常用时间处理方法
2015/05/11 PHP
smarty中常用方法实例总结
2015/08/07 PHP
php使用json-schema模块实现json校验示例
2019/09/28 PHP
jQuery选择头像并实时显示的代码
2010/06/27 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
JS简单实现动画弹出层效果
2015/05/05 Javascript
简介JavaScript中fixed()方法的使用
2015/06/08 Javascript
javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结
2016/10/10 Javascript
jQuery与js实现颜色渐变的方法
2016/12/30 Javascript
vue中SPA单页面应用程序详解
2017/11/07 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
2017/11/14 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
2018/02/08 Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
2019/07/16 Javascript
layui上传图片到服务器的非项目目录下的方法
2019/09/26 Javascript
js中switch语句的学习笔记
2020/03/25 Javascript
js 实现碰撞检测的示例
2020/10/28 Javascript
详解python中的线程与线程池
2019/05/10 Python
Python使用微信接入图灵机器人过程解析
2019/11/04 Python
在tensorflow中设置保存checkpoint的最大数量实例
2020/01/21 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
pandas将list数据拆分成行或列的实现
2020/12/13 Python
解决import tensorflow导致jupyter内核死亡的问题
2021/02/06 Python
python 第三方库paramiko的常用方式
2021/02/20 Python
支持IE8的纯css3开发的响应式设计动画菜单教程
2014/11/05 HTML / CSS
HTML5的一个显示电池状态的API简介
2015/06/18 HTML / CSS
美国沙龙美发产品购物网站:Hair.com by L’Oreal
2020/11/09 全球购物
Java的类与C++的类有什么不同
2014/01/18 面试题
毕业自我鉴定范文
2013/11/06 职场文书
财务人员个人求职信范文
2013/12/04 职场文书
关于幼儿的自我评价
2013/12/18 职场文书
学习党章思想汇报
2014/01/07 职场文书
司法局群众路线教育实践活动整改措施
2014/09/17 职场文书
大学生联谊活动策划书(光棍节)
2014/10/10 职场文书
nginx 添加http_stub_status_module模块
2022/05/25 Servers