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中的Django框架中prefetch_related()函数对数据库查询的优化
Apr 01 Python
编写Python的web框架中的Model的教程
Apr 29 Python
使用Python的web.py框架实现类似Django的ORM查询的教程
May 02 Python
Python 遍历列表里面序号和值的方法(三种)
Feb 17 Python
python 3.6.4 安装配置方法图文教程
Sep 18 Python
Python turtle库绘制菱形的3种方式小结
Nov 23 Python
Python3 A*寻路算法实现方式
Dec 24 Python
PyInstaller运行原理及常用操作详解
Jun 13 Python
Python数据可视化实现多种图例代码详解
Jul 14 Python
Python实现PS滤镜中的USM锐化效果
Dec 04 Python
Selenium环境变量配置(火狐浏览器)及验证实现
Dec 07 Python
删除pycharm鼠标右键快捷键打开项目的操作
Jan 16 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通用检测函数集合
2006/11/25 PHP
PHP 字符串 小常识
2009/06/05 PHP
第七章 php自定义函数实现代码
2011/12/30 PHP
php实现utf-8转unicode函数分享
2015/01/06 PHP
深入探究PHP的多进程编程方法
2015/08/18 PHP
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
2012/12/09 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
javascript事件绑定学习要点
2016/03/09 Javascript
AngularJS通过$location获取及改变当前页面的URL
2016/09/23 Javascript
微信小程序 滚动到某个位置添加class效果实现代码
2017/04/19 Javascript
vue操作动画的记录animate.css实例代码
2019/04/26 Javascript
[50:48]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python实现遍历windows所有窗口并输出窗口标题的方法
2015/03/13 Python
django开发之settings.py中变量的全局引用详解
2017/03/29 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
2017/09/28 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
2018/12/10 Python
python3.x实现base64加密和解密
2019/03/28 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
Django中信号signals的简单使用方法
2019/07/04 Python
简单了解python中的f.b.u.r函数
2019/11/02 Python
python [:3] 实现提取数组中的数
2019/11/27 Python
美国知名的百货清仓店:Neiman Marcus Last Call
2016/08/03 全球购物
Jogun Shop中文官网:韩国知名时尚男装网站
2016/10/12 全球购物
美国户外生活方式品牌:Eddie Bauer
2016/12/28 全球购物
比利时买床:Beter Bed
2017/12/06 全球购物
美国名表在线商城:Ashford(支持中文)
2019/09/24 全球购物
电大自我鉴定
2013/10/27 职场文书
入党思想汇报
2014/01/05 职场文书
竞选副班长演讲稿
2014/04/24 职场文书
环境监测与治理技术专业求职信
2014/07/06 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
确保工程质量承诺书
2015/04/29 职场文书
孔子观后感
2015/06/08 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
Golang入门之计时器
2022/05/04 Golang