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中os和shutil模块实用方法集锦
May 13 Python
Python中用sleep()方法操作时间的教程
May 22 Python
利用python写个下载teahour音频的小脚本
May 08 Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
Jul 27 Python
Python使用回溯法子集树模板解决迷宫问题示例
Sep 01 Python
在CMD命令行中运行python脚本的方法
May 12 Python
numpy判断数值类型、过滤出数值型数据的方法
Jun 09 Python
python实现windows壁纸定期更换功能
Jan 21 Python
详解Python函数式编程—高阶函数
Mar 29 Python
django富文本编辑器的实现示例
Apr 10 Python
Python爬虫实现模拟点击动态页面
Mar 05 Python
Keras自定义IOU方式
Jun 10 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/10/09 PHP
DISCUZ 论坛管理员密码忘记的解决方法
2009/05/14 PHP
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
php中opendir函数用法实例
2014/11/15 PHP
php获取网站百度快照日期的方法
2015/07/29 PHP
php+ajax登录跳转登录实现思路
2016/07/31 PHP
Yii框架引入coreseek分页功能示例
2019/02/08 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
2020/05/25 PHP
基于Web标准的UI组件 — 树状菜单(2)
2006/09/18 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
2013/11/28 Javascript
JavaScript变量的作用域全解析
2015/08/14 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
原生JS实现旋转木马式图片轮播插件
2016/04/25 Javascript
Angular JS数据的双向绑定详解及实例
2016/12/31 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
解决layui 表单元素radio不显示渲染的问题
2019/09/04 Javascript
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
Javascript作用域和作用域链原理解析
2020/03/03 Javascript
JS如何判断对象是否包含某个属性
2020/08/29 Javascript
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
2019/03/01 Python
python装饰器代替set get方法实例
2019/12/19 Python
python 中的paramiko模块简介及安装过程
2020/02/29 Python
Python实现疫情通定时自动填写功能(附代码)
2020/05/27 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
你不知道的5个HTML5新功能
2016/06/28 HTML / CSS
html svg生成环形进度条的实现方法
2019/09/23 HTML / CSS
塔吉特百货公司官网:Target
2017/04/27 全球购物
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
加拿大快时尚零售商:Ardene
2018/02/14 全球购物
市场营销求职信范文
2014/02/21 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
灵山大佛导游词
2015/02/04 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
Python OpenCV形态学运算示例详解
2022/04/07 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python