Python设计模式之解释器模式原理与用法实例分析

本文实例讲述了Python设计模式之解释器模式原理与用法。分享给大家供大家参考,具体如下:

解释器模式(Interpreter Pattern):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.

下面是一个解释器模式的demo:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大话设计模式
设计模式——解释器模式
解释器模式(Interpreter Pattern):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.
"""
#抽象一个解释器类
class AbstractExpression(object):
  def interpreter(self, context):
    pass
#具体解释器——终端 继承抽象解释器
class TerminalExpression(AbstractExpression):
  def interpreter(self, context):
    print "终端解释器",context
#具体解释器——终端 继承抽象解释器
class NotTerminalExpression(AbstractExpression):
  def interpreter(self, context):
    print "非终端解释器",context
class Context(object):
  def __init__(self):
    self.name = ""
if __name__ == "__main__":
  context = Context()
  context.name = 'Andy'
  arr_list = [NotTerminalExpression(),TerminalExpression(),TerminalExpression()]
  for entry in arr_list:
    entry.interpreter(context)

运行结果:

上面类的设计如下图:

当有一个语言需要执行,并且可以将该语言的句子表示为抽象语法树时,可使用解释器模式

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

(0)

相关推荐

  • 在pycharm中python切换解释器失败的解决方法

    在pycharm中我们有时需要切换python的版本,这里需要注意的是我们是在PyCharm中的Preferences中切换的, 在File的Setting中切换可能会导致失败 以上这篇在pycharm中python切换解释器失败的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • Python3解释器知识点总结

    Python3 解释器 Linux/Unix的系统上,一般默认的 python 版本为 2.x,我们可以将 python3.x 安装在 /usr/local/python3 目录中. 安装完成后,我们可以将路径 /usr/local/python3/bin 添加到您的 Linux/Unix 操作系统的环境变量中,这样您就可以通过 shell 终端输入下面的命令来启动 Python3 . $ PATH=$PATH:/usr/local/python3/bin/python3 # 设置环境变量 $

  • linux查找当前python解释器的位置方法

    先进入python 输入 import sys sys.executable 即可! 以上这篇linux查找当前python解释器的位置方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • 深入Python解释器理解Python中的字节码

    我最近在参与Python字节码相关的工作,想与大家分享一些这方面的经验.更准确的说,我正在参与2.6到2.7版本的CPython解释器字节码的工作. Python是一门动态语言,在命令行工具下运行时,本质上执行了下面的步骤: 当第一次执行到一段代码时,这段代码会被编译(如,作为一个模块加载,或者直接执行).根据操作系统的不同,这一步生成后缀名是pyc或者pyo的二进制文件. 解释器读取二进制文件,并依次执行指令(opcodes). Python解释器是基于栈的.要理解数据流向,我们需要知道每条指

  • Pycharm更换python解释器的方法

    安装了pycharm之后有一个新装的python解释器,顶替了之前系统的python 那样的话,原来利用pip安装的一些库会无法import. 要么加入环境变量,要么更换运行的解释器: Mac PyCharm > Preferences... > Project Interpreter > Python Interpreters Windows File->Default Settings...->Project Interpreter 以上这篇Pycharm更换python

  • virtualenv 指定 python 解释器的版本方法

    使用如下命令为 ubuntu 系统安装 virtualenv sudo apt-get install python-virtualenv 当我们使用 virtualenv 命令创建虚拟环境时,默认使用的 python 解释器为 /usr/bin/python27(然后创建该解释器对应的副本),那么我们该如何指定解释器的版本呢? 使用参数 -p $ sudo virtualenv -p ~/anaconda3/bin/python test 以上这篇virtualenv 指定 python 解释

  • 用Python编写一个简单的Lisp解释器的教程

    本文有两个目的: 一是讲述实现计算机语言解释器的通用方法,另外一点,着重展示如何使用Python来实现Lisp方言Scheme的一个子集.我将我的解释器称之为Lispy (lis.py).几年前,我介绍过如何使用Java编写一个Scheme解释器,同时我还使用Common Lisp语言编写过一个版本.这一次,我的目的是尽可能简单明了地演示一下Alan Kay所说的"软件的麦克斯韦方程组" (Maxwell's Equations of Software). Lispy支持的Scheme

  • 在Python文件中指定Python解释器的方法

    以下针对Ubuntu系统,Windows系统没有测试过. Ubuntu中默认就安装有Python 2.x和Python 3.x,默认情况下python命令指的是Python 2.x.因此当将Python脚本设为可执行文件直接在命令行里执行时,系统调用的是Python 2.x的解释器. 如果在直接执行Python脚本(例如在命令行直接输入xxx.py)时,想调用Python 3.x解释器去解释脚本,一种方法是修改符号链接,让python命令指向Python3.这种方法在自己的系统上还行得通,如果脚

  • 各个系统下的Python解释器相关安装方法

    Python下载 Python最新源码,二进制文档,新闻资讯等可以在Python的官网查看到: Python官网:http://www.python.org/ 你可以在一下链接中下载Python的文档,你可以下载 HTML.PDF 和 PostScript 等格式的文档. Python文档下载地址:www.python.org/doc/ Python安装 Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上). 您需要下载适用于您使用平台的二进制代码,然后安装Python. 如果

  • Python设计模式之解释器模式原理与用法实例分析

    本文实例讲述了Python设计模式之解释器模式原理与用法.分享给大家供大家参考,具体如下: 解释器模式(Interpreter Pattern):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 下面是一个解释器模式的demo: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'Andy' """ 大话设计模式 设计模式--解释器模式 解释器模式(Interpr

  • Python设计模式之组合模式原理与用法实例分析

    本文实例讲述了Python设计模式之组合模式原理与用法.分享给大家供大家参考,具体如下: 组合模式(Composite Pattern):将对象组合成成树形结构以表示"部分-整体"的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性. 下面是一个组合模式的demo: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'Andy' """ 大话设计模式 设计模式--组合模式 组合模

  • Python设计模式之桥接模式原理与用法实例分析

    本文实例讲述了Python设计模式之桥接模式原理与用法.分享给大家供大家参考,具体如下: 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化. 下面是一个桥接模式的demo: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'Andy' """ 大话设计模式 设计模式--桥接模式 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独

  • Python设计模式之迭代器模式原理与用法实例分析

    本文实例讲述了Python设计模式之迭代器模式原理与用法.分享给大家供大家参考,具体如下: 迭代器模式(Iterator Pattern):提供方法顺序访问一个聚合对象中各元素,而又不暴露该对象的内部表示. 下面是一个迭代器模式的demo: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'Andy' """ 大话设计模式 设计模式--迭代器模式 迭代器模式(Iterator Pattern):提供方法顺序访

  • Python设计模式之命令模式原理与用法实例分析

    本文实例讲述了Python设计模式之命令模式原理与用法.分享给大家供大家参考,具体如下: 命令模式(Command Pattern):将请求封装成对象,从而使可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤消的操作. 下面是一个命令模式的demo: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'Andy' """ 大话设计模式 设计模式--命令模式 命令模式(Command Patt

  • javascript设计模式 – 解释器模式原理与用法实例分析

    本文实例讲述了javascript设计模式 – 解释器模式原理与用法.分享给大家供大家参考,具体如下: 介绍:之前在做java开发时,数据库的增删改查特别频繁,并且场景不同需要用到的SQL语句页都不同,如何用调用方法的形式来使用sql语句,拼接sql?这就是这一节我们要讲的解释器模式. 定义:定义一个语言的文法,并且建立一个解释器来解释该语言中的句子,这里的语言是指使用规定格式和语法的代码.解释器模式是一种类行为型模式. 场景:我们实现一个解释器,用来判断传递的数字是奇数还是偶数,是正数还是负数

  • PHP设计模式之策略模式原理与用法实例分析

    本文实例讲述了PHP设计模式之策略模式原理与用法.分享给大家供大家参考,具体如下: 策略模式(Strategy Pattern) 策略模式是对象的行为模式,用意是对一组算法的封装.动态的选择需要的算法并使用. 策略模式指的是程序中涉及决策控制的一种模式.策略模式功能非常强大,因为这个设计模式本身的核心思想就是面向对象编程的多形性思想. 策略模式的三个角色: 1. 抽象策略角色 2. 具体策略角色 3. 环境角色(对抽象策略角色的引用) 实现步骤: 1. 定义抽象角色类(定义好各个实现的共同抽象方

  • javascript设计模式 – 职责链模式原理与用法实例分析

    本文实例讲述了javascript设计模式 – 职责链模式原理与用法.分享给大家供大家参考,具体如下: 介绍:很多情况下,在一个软件系统中可以处理某个请求的对象不止一个.例如一个网络请求过来,需要有对象去解析request Body,需要有对象去解析请求头,还需要有对象去对执行对应controller.请求一层层传递,让每一个对象都基于请求完成自己的任务,然后将请求传递给下一个处理程序.是不是感觉有点中间件的感觉. 定义:职责链就是避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求.将

  • javascript设计模式 – 享元模式原理与用法实例分析

    本文实例讲述了javascript设计模式 – 享元模式原理与用法.分享给大家供大家参考,具体如下: 介绍:在我们日常开发中需要创建很多对象,虽然垃圾回收机制能帮我们进行回收,但是在一些需要重复创建对象的场景下,就需要有一种机制来进行优化,提高系统资源的利用率. 享元模式就是解决这类问题,主要目的是减少创建对象的数量.享元模式提倡重用现有同类对象,如未找到匹配的对象则创建新对象 定义:运用共享技术有效的支持大量细粒度对象的复用.系统只适用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象

  • javascript设计模式 – 中介者模式原理与用法实例分析

    本文实例讲述了javascript设计模式 – 中介者模式原理与用法.分享给大家供大家参考,具体如下: 介绍:在前端开发的过程中,组件与组件之间的通讯特别常见,一个组件的change需要引起数个组件的change,这就需要组件与组件之间存在复杂的多对多关系链.如何来减轻维护这些关系的复杂度,让组件和组件之间实现低耦合?这就是我们即将介绍的中介者模式. 定义:用一个中介对象(中介者)来封装一系列的对象交互,中介者使个对象不需要显式的相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互.中介

随机推荐