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程序设计有所帮助。
相关推荐
-
在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,这就需要组件与组件之间存在复杂的多对多关系链.如何来减轻维护这些关系的复杂度,让组件和组件之间实现低耦合?这就是我们即将介绍的中介者模式. 定义:用一个中介对象(中介者)来封装一系列的对象交互,中介者使个对象不需要显式的相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互.中介
随机推荐
- 将编码从GB2312转成UTF-8的方法汇总(从前台、程序、数据库)
- 远程登陆SQL Server 2014数据库的方法
- PHP基于Redis消息队列实现发布微博的方法
- 讲解Python的Scrapy爬虫框架使用代理进行采集的方法
- JavaScript 学习笔记之基础中的基础
- 在JavaScript中实现命名空间
- PHP时间戳与日期之间转换的实例介绍
- Laravel 5.0 发布 新版本特性详解
- 解决不用sizeof求出int大小的方法
- Android编程实现图标拖动效果的方法
- JS+FLASH幻灯片播放图片脚本,整理了代码,使得调用更加方便!
- Ionic项目中Native Camera的使用方法
- sql 分组查询问题
- jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
- 堆基本操作实现最大堆
- Struts2的配置 struts.xml Action详解
- JS中精巧的自动柯里化实现方法
- Python中正则表达式的用法总结
- 解决异常FileNotFoundException:class path resource找不到资源文件的问题
- eBay 打造基于 Apache Druid 的大数据实时监控系统