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 相关文章推荐
利用Anaconda完美解决Python 2与python 3的共存问题
May 25 Python
Python编程之字符串模板(Template)用法实例分析
Jul 22 Python
Python tkinter事件高级用法实例
Jan 31 Python
python实现输入数字的连续加减方法
Jun 22 Python
详解python3中的真值测试
Aug 13 Python
python实现简单的文字识别
Nov 27 Python
python 使用正则表达式按照多个空格分割字符的实例
Dec 20 Python
Python后台开发Django会话控制的实现
Apr 15 Python
使用Python轻松完成垃圾分类(基于图像识别)
Jul 09 Python
Django框架 Pagination分页实现代码实例
Sep 04 Python
django商品分类及商品数据建模实例详解
Jan 03 Python
Python pyecharts绘制条形图详解
Apr 02 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
PHP判断是否有Get参数的方法
2014/05/05 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
详谈PHP面向对象中常用的关键字和魔术方法
2017/02/04 PHP
关于JavaScript的gzip静态压缩方法
2007/01/05 Javascript
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
javascript使用isNaN()函数判断变量是否为数字
2013/09/21 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
AngularJS表单提交实例详解
2017/02/18 Javascript
Javascript防止图片拉伸的自适应处理方法
2017/12/26 Javascript
nodejs基于WS模块实现WebSocket聊天功能的方法
2018/01/12 NodeJs
详解Angular如何正确的操作DOM
2018/07/06 Javascript
mpvue将vue项目转换为小程序
2018/09/30 Javascript
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
[56:41]iG vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/17 DOTA
简单的python协同过滤程序实例代码
2018/01/31 Python
Django 中间键和上下文处理器的使用
2019/03/17 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
PyCharm永久激活方式(推荐)
2020/09/22 Python
Pycharm github配置实现过程图解
2020/10/13 Python
html5 touch事件实现触屏页面上下滑动(二)
2016/03/10 HTML / CSS
HTML5的革新 结构之美
2011/06/20 HTML / CSS
英国马莎百货官网:Marks & Spencer
2016/07/29 全球购物
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
eDreams葡萄牙:全球最大的在线旅行社之一
2019/04/15 全球购物
写好自荐信的技巧
2013/11/08 职场文书
仓库主管的岗位职责
2013/12/04 职场文书
大学毕业感言一句话
2014/02/06 职场文书
公证委托书模板
2014/04/03 职场文书
大学班级文化建设方案
2014/05/06 职场文书
捐书倡议书
2014/08/29 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
2014年教师党员自我评议
2014/09/19 职场文书
法定代表人资格证明书
2015/06/18 职场文书
PyCharm 安装与使用配置教程(windows,mac通用)
2021/05/12 Python
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
2022/05/04 Python