首页 文章 精选 留言 我的

精选列表

搜索[python],共10000篇文章
优秀的个人博客,低调大师

python设计模式(十三):解释器模式

此前已经将创造型模式、结构性模式分享了,后面将分享模式设计中的另一种典型模式:行为型模式。 创造型模式是解决实体的生成问题、结构性模式是为了解决实体的组合、搭配问题 ,而行为型设计模式的出现是为了解决不同实体通信的问题。 解释器模式:开发者自定义一种“有内涵”的语言(或者叫字符串),并设定相关的解释规则,输入该字符串后可以输出公认的解释,或者执行程序可以理解的动作。这种模式被用在 SQL 解析、符号处理引擎等 解释器模式要实现两个核心角色: 终结符表达式:实现与文法中的元素相关联的解释操作,通常一个解释器模式中只有一个终结符表达式,但有多个实例,对应不同的终结符。终结符一半是文法中的运算单元,比如有一个简单的公式R=R1+R2,在里面R1和R2就是终结符,对应的解析R1和R2的解释器就是终结符表达式。 非终结符表达式:文法中的每条规则对应于一个非终结符表达式,非终结符表达式一般是文法中的运算符或者其他关键字,比如公式R=R1+R2中,+就是非终结符,解析+的解释器就是一个非终结符表达式。非终结符表达式根据逻辑的复杂程度而增加,原则上每个文法规则都对应一个非终结符表达式。 #-*-coding:utf-8-*-importtimeimportdatetime"""实现一段简单的中文编程"""classCode: """自定义语言""" def__init__(self,text=None): self.text=textclassInterpreterBase: """自定义解释器基类""" defrun(self,code): passclassInterpreter(InterpreterBase): """实现解释器方法,实现终结符表达式字典""" defrun(self,code): code=code.text code_dict={'获取当前时间戳':time.time(),"获取当前日期":datetime.datetime.now().strftime("%Y-%m-%d%H:%M:%S")} print(code_dict.get(code))if__name__=='__main__': test=Code() test.text='获取当前时间戳' data1=Interpreter().run(test) test.text='获取当前日期' data2=Interpreter().run(test) -----------------1550156061.11817072019-02-1422:54:21 上面是个很简单的案例,同时我们也可以增加不同语言和不同的功能。 主要解决:对于一些固定文法构建一个解释句子的解释器。 何时使用:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。 应用实例:编译器、运算表达式计算。 优点:1、可扩展性比较好,灵活。 2、增加了新的解释表达式的方式。 3、易于实现简单文法。 缺点:1、可利用场景比较少。 2、对于复杂的文法比较难维护。 3、解释器模式会引起类膨胀。 但实际上该模式的应用场景比较少

优秀的个人博客,低调大师

python设计模式(十五):责任链模式

将多个处理方法连接成一条链条,请求将在这条链条上流动直到该链条中有一个节点可以处理该请求;通常这条链条是一个对象包含对另一个对象的引用而形成链条,每个节点有对请求的条件,当不满足条件将传递给下一个节点处理。 示例code: 创建三个不同的对象,每个对象只处理指定范围内的数字,不属于自己的就传递给下一个对象。 classBases: def__init__(self,obj=None): self.obj=obj defscreen(self,number): passclassA(Bases): defscreen(self,number): if200>number>100: print("{}划入A集合".format(number)) else: self.obj.screen(number)classB(Bases): defscreen(self,number): ifnumber>=200: print("{}划入B集合".format(number)) else: self.obj.screen(number)classC(Bases): defscreen(self,number): if100>=number: print("{}划入C集合".format(number))if__name__=='__main__': test=[10,100,150,200,300] c=C() b=B(c) a=A(b) foriintest: a.screen(i) -------------------10划入C集合100划入C集合150划入A集合200划入B集合300划入B集合 责任链模式有几个要点: 一个对象中含有另一个对象的引用以此类推形成链条 每个对象中应该有明确的责任划分即处理请求的条件 链条的最后一节应该设计成通用请求处理,以免出现漏洞 请求应该传入链条的头部

优秀的个人博客,低调大师

python设计模式(二):建造者模式

建造者,顾名思义是修建建筑的工人,按照基本的施工方式:打桩-浇筑框架-砌墙-装修,同样的施工流程却能造就千差万别的建筑,因为不同的材料、不同设计,可以表现出千差万别,这就是建造者模式的简要理解。 示例代码: #-*-coding:utf-8-*-classBuilder(): """建造流程:原料—施工""" def__init__(self): self.materiel=None self.design=None defrun(self): print('修建完工!设计建筑:%s|购买原料:%s'%(self.design,self.materiel))classA(Builder): """方案A,修建毛坯房""" defget_materiel(self): self.materiel="砖瓦" defget_design(self): self.design="毛坯房"classB(Builder): """方案B,修建写字楼""" defget_materiel(self): self.materiel="玻璃" defget_design(self): self.design="写字楼"classDirector: """调度:买原料-组织施工""" def__init__(self): self.programme=None defbuild(self): self.programme.get_materiel() print("购买原料:{}".format(self.programme.materiel)) self.programme.get_design() print("设计方案:{}".format(self.programme.design)) self.programme.run()if__name__=='__main__': #修建毛坯房 test=Director() test.programme=A() test.build() #修建写字楼 test=Director() test.programme=B() test.build() ---------------------------- 购买原料:砖瓦 设计方案:毛坯房 修建完工!设计建筑:毛坯房|购买原料:砖瓦 购买原料:玻璃 设计方案:写字楼 修建完工!设计建筑:写字楼|购买原料:玻璃 上面是一个很简单直白的例子,建造者模式应该有几个关键要素:相同的流程、不同的表示、修建者。也就是同一个对象(建筑)在同一修建者组织下,以相同的实例化流程(施工流程)来达到不同的表示效果(毛坯、写字楼) 这样的好处使得构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

优秀的个人博客,低调大师

python 数据类型 、运算符

基本的(字面量)值 类型 描述 语法示例 整型 无小数部分的数 42 长整型 大整数 42L 浮点型 有小数部分的数 42.5, 42.5e-2 复合型 实数(整数或浮点数)和虚数的和 38+4j, 42j 字符串 不可变的字符序列 "foo", 'bar', """baz""", r'n' Unicode 不可变的Unicode字符序列 u'foo', u"bar", u"""baz""" 运算符 运算符 描述 优先级 lambda lambda表达式 1 or 逻辑或 2 and 逻辑与 3 not 逻辑非 4 in 成员资格测试 5 not in 非成员资格测试 5 is 一致性测试 6 is not 非一致性测试 6 < 小于 7 > 大于 7 <= 小于或等于 7 >= 大于或等于 7 == 等于 7 != 不等于 7 \ 按位或 8 ^ 按位异或 9 & 按位与 10 << 左移 11 >> 右移 11 + 加法 12 - 减法 12 * 乘法 13 / 除法 13 % 求余 13 + 一元一致性 14 - 一元不一致性 14 ~ 按位补码 15 ** 幂 16 x.attribute 特性引用 17 x[index] 项目访问 18 x[index1:index2[:index3]] 切片 19 f(arg...) 函数调用 20 (...) 将表达式加圆括号或元组显示 21 [...] 列表显示 22 {key:value, ...} 字典显示 23 'expressions...' 字符串转化 24

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册